Как скрыть изображения из медиатеки от обычных пользователей?

20 дек. 2012 г., 18:57:25
Просмотры: 17.2K
Голосов: 5

Как администратору мне очень нравятся возможности медиаменеджера в WordPress 3.5.

Однако на много пользовательском сайте все пользователи видят все изображения в медиатеке - независимо от того, загружали они их или нет. Раньше можно было ограничить доступ через скрипт в functions.php.
Например:

// Скрыть вкладку Медиатека для каждого отдельного агента
function remove_medialibrary_tab($tabs) {
    if ( !current_user_can( 'update_core' ) ) {
        unset($tabs['library']);
        return $tabs;
    }    }
add_filter('media_upload_tabs','remove_medialibrary_tab');

Этот код больше не работает, так как медиатека теперь работает на JavaScript.

Вопрос: как теперь скрыть или ограничить доступ к изображениям в медиатеке WordPress 3.5 для пользователей, которые не загружали эти изображения? Мне нужно, чтобы пользователи видели только свои изображения или только те, которые они загрузили для конкретного поста или страницы.

Текущая структура отлично подходит для газет, которые хотят делиться изображениями со всей организацией, но не очень хороша для сайтов с более строгими требованиями к независимому доступу нескольких пользователей.

Я не программист или в лучшем случае любитель - но мне кажется, что возможные варианты включают: скрытие или удаление всех фильтров вложений в новом выпадающем меню медиатеки 3.5, оставив только "загруженные на эту страницу" - или возможно переключатель, который позволит администраторам включать/выключать видимость медиатеки для обычных пользователей.

Буду благодарен за любые рекомендации или указания по этому вопросу.

1
Комментарии

Посмотрите это сообщение, а затем этот плагин: http://wordpress.org/support/topic/restrict-editors-from-viewing-media-that-others-have-uploaded http://wordpress.org/support/view/plugin-reviews/view-own-posts-media-only Кажется, это исправляет проблему в WP 3.5

User User
8 янв. 2013 г. 04:47:04
Все ответы на вопрос 3
2
11

Чтобы разрешить текущим пользователям просматривать только свои загруженные вложения, добавьте следующий код в actions вашей темы:

add_filter( 'posts_where', 'devplus_wpquery_where' );
function devplus_wpquery_where( $where ){
    global $current_user;

    if( is_user_logged_in() ){
         // авторизованный пользователь, но просматриваем ли мы медиабиблиотеку?
         if( isset( $_POST['action'] ) && ( $_POST['action'] == 'query-attachments' ) ){
            // здесь вы можете добавить дополнительную логику, если необходимо
            $where .= ' AND post_author='.$current_user->data->ID;
        }
    }

    return $where;
}

Надеюсь, это поможет!

5 июл. 2013 г. 17:49:33
Комментарии

Перепробовал множество вариантов для работы этого на фронтенде с ACF. Это первый, который реально сработал для меня. Отличное решение! Спасибо!

Jake Jake
1 февр. 2014 г. 03:26:46

Я пытался ограничить Медиабиблиотеку для фронтенд-формы ACF, чтобы отображались только загруженные пользователем вложения. Не знал о posts_where - Похоже, это отлично работает! Спасибо за публикацию.

derekshirk derekshirk
16 мар. 2016 г. 20:01:12
1

Спасибо @timocouckuyt, это работает отлично, но вам также понадобится этот код для ссылки /wp-admin/upload.php :

add_filter('pre_get_posts', 'hide_posts_media_by_other');
function hide_posts_media_by_other($query) {
global $pagenow;

if( 'upload.php' != $pagenow || !$query->is_admin ){
    return $query;
}

if( !current_user_can( 'manage_options' ) ) {
    global $user_ID;
    $query->set('author', $user_ID );
}
return $query;
}

Для полного руководства по скрытию медиафайлов и записей других пользователей, пожалуйста, ознакомьтесь с этим руководством: http://jeffreycarandang.com/tutorials/hide-wordpress-posts-media-uploaded-users/

С уважением, phpbits

6 апр. 2014 г. 15:14:16
Комментарии

Ссылка в этом ответе не работает @JeffreyCarandang, не могли бы вы, возможно, исправить ее?

osxconor osxconor
12 окт. 2021 г. 12:11:02
0

исходная ссылка: https://www.wpexplorer.com/disable-image-page/

Перенаправление с помощью пользовательской функции

<?php
// Скрываем вложения от просмотра на фронтенде, перенаправляя пользователей
function hide_my_attachments_by_redirecting() {
    if ( is_attachment() ) {
        global $post;
        if ( $post && $post->post_parent ) {
            wp_redirect( esc_url( get_permalink( $post->post_parent ) ), 301 );
            exit;
        } else {
            wp_redirect( esc_url( home_url( '/' ) ), 301 );
            exit;
        }
    }
}
add_action( 'template_redirect', 'hide_my_attachments_by_redirecting' );

ИЛИ

Перенаправление через файл image.php

Ваш второй вариант — полностью отключить страницы вложений, добавив перенаправление WordPress непосредственно в начало файла image.php.

  1. Создайте новый файл с именем image.php в вашей дочерней теме (всегда лучше работать с дочерними темами при редактировании темы) или, если вы разрабатываете собственную тему, создайте пустой файл image.php в вашей теме.
  2. Вставьте приведенный ниже код в ваш файл image.php.
<?php
global $post;
if ( $post && $post->post_parent ) {
    wp_redirect( esc_url( get_permalink( $post->post_parent ) ), 301 );
    exit;
} else {
    wp_redirect( esc_url( home_url( '/' ) ), 301 );
    exit;
}
1 нояб. 2022 г. 18:08:11