Biblioteca de mídia para listar imagens apenas enviadas pelo usuário


9

Quero listar imagens apenas para a imagem carregada pelo usuário. Aqui está o cenário:

  1. Usando o carregador de imagens no front-end usando iframe.
  2. Adicionei upload_fileslimite aos usuários no nível do assinante e quero que eles vejam apenas as imagens que foram enviadas.
  3. Encontrei este Q Restringindo usuários a visualizar apenas os itens da biblioteca de mídia que eles carregaram? mas a resposta aceita não está funcionando para mim.

    // 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. A página de front-end em que estou usando o carregador de imagens é denominada "Entrada".

  5. Se eu remover essa parte do código, if( 'upload.php' != $pagenow ) return;o código funcionará. Eu acho que tenho que melhorar essa parte do código condicional, mas não consegui descobrir. O condicional é importante porque eu não quero que o código seja aplicado em outras páginas onde não é necessário.

Então, preciso de ajuda para melhorar a parte condicional como mencionei. Obrigado!


11
Se você estiver copiando / colando o código, faça o seguinte: Se você inseriu seu código apenas no nome de uma função, adicione a quantidade adequada de espaços para functionnão alinhar com o conteúdo fn.
Kaiser #

Respostas:


5

Isso funciona para mim para listar os itens enviados por um usuário na biblioteca de mídia.

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' );

Isso permitirá que todos os usuários com a manage_optionscapacidade (geralmente admin) vejam todas as imagens, os outros usuários verão apenas suas próprias imagens. Note que algumas melhorias podem ser feitas como $pagenowe current_user_can. Não é uma beleza, mas faz o trabalho


2
Idealmente, você tentaria comparar com alguma parte do wp_upload_dir()resultado.
Kaiser #

2

O formulário de upload de mídia que eu estava acessando via thickbox era media-upload.php. Então, eu tive que mudar o condicional para if( 'upload.php' != $pagenow && 'media-upload.php' != $pagenow). Eu esqueci de olhar para o lugar óbvio :)

// 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;
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.