Медиатека для отображения изображений, загруженных только пользователем

9

Я хочу перечислить изображения только для загруженного пользователем изображения. Вот сценарий:

  1. Использование загрузчика изображений на внешнем интерфейсе с помощью iframe.
  2. Я добавил upload_filesограничение для пользователей уровня подписчика и хочу, чтобы они видели только загруженные ими изображения.
  3. Я обнаружил, что это Q Запрещает пользователям просматривать только те элементы медиатеки, которые они загрузили? но принятый ответ не работает для меня.

    // Code originally by @t31os
    add_action('pre_get_posts','users_own_attachments');
    
    function users_own_attachments( $wp_query_obj ) 
    {
        global $current_user, $pagenow;
    
        if( !is_a( $current_user, 'WP_User') )
            return;
    
        if( 'upload.php' != $pagenow )
            return;
    
        if( !current_user_can('delete_pages') )
            $wp_query_obj->set('author', $current_user->id );
    
        return;
    }
  4. Страница внешнего интерфейса, которую я использую для загрузки изображений, называется «Entry».

  5. Если я удаляю эту часть кода, if( 'upload.php' != $pagenow ) return;код работает. Я думаю, что я должен улучшить эту часть условного кода, но не смог понять это. Условие важно, потому что я не хочу, чтобы код применялся на других страницах, где это не требуется.

Итак, мне нужна помощь, чтобы улучшить условную часть, как я уже говорил. Спасибо!

Sisir
источник
1
Если вы копируете / вставляете код, пожалуйста, сделайте следующее: Если вы только завернули свой код в имя функции, пожалуйста, добавьте правильное количество пробелов, чтобы functionоно не совпадало с содержимым fn.
Кайзер

Ответы:

5

Это работает для меня, чтобы перечислить элементы, загруженные пользователем в медиа-библиотеке.

function users_my_media_only( $wp_query ) {
    if ( false !== strpos( $_SERVER[ 'REQUEST_URI' ], '/wp-admin/upload.php' ) ) {
        $current_user = wp_get_current_user();
        $current_user = $current_user->ID;
        if ( ! current_user_can( 'manage_options' ) ) {
            global $current_user;
            $wp_query->set( 'author', $current_user->id );
        }
    }
}
add_filter('parse_query', 'users_my_media_only' );

Это позволит всем пользователям с manage_optionsвозможностью (обычно администратором) видеть все изображения, другие пользователи будут видеть только свои собственные изображения. Обратите внимание, что некоторые улучшения могут быть сделаны как $pagenowи current_user_can. Не красота, но она делает работу

user983248
источник
2
В идеале вы бы попытались сравнить с какой-то частью wp_upload_dir()результата.
Кайзер
2

Форма загрузки медиа, которую я вытащил с помощью Thickbox, была media-upload.php. Итак, мне пришлось изменить условное на if( 'upload.php' != $pagenow && 'media-upload.php' != $pagenow). Я забыл заглянуть в очевидное место :)

// Code originally by @t31os
add_action('pre_get_posts','users_own_attachments');

function users_own_attachments( $wp_query_obj ) 
{
    global $current_user, $pagenow;

    if( !is_a( $current_user, 'WP_User') )
        return;

    if( 'upload.php' != $pagenow && 'media-upload.php' != $pagenow)
        return;

    if( !current_user_can('delete_pages') )
        $wp_query_obj->set('author', $current_user->id );

    return;
}
Sisir
источник