Arquivo da tag: filtro

Filtro para conteúdo na biblioteca de mídia do WordPress

Por: Diogo Teobaldo

 

As vezes pode ser útil filtrar quais conteúdos da biblioteca de mídia de seu site os usuários podem ter acesso. Por isso mostrarei uma maneira pratica e simples de fazer o mesmo.

No caso abaixo, o objetivo era fazer com que os usuários(exceto editores) tivessem acesso apenas a conteúdos vinculados a uma post associado a ele ou que tenha sido enviado por ele.

1º passo – Utilizamos um filtro para ter acesso a query de posts e poder altera-la:

add_filter( 'posts_where', 'attachments_wpquery_where', 10, 2 )

2º passo – Definição da função:

function attachments_wpquery_where( $where ){

3° passo – Devemos obter o id do post para saber quais imagens estão vinculadas ao mesmo, e para isso utilizamos a expressão abaixo:

$id = $_POST['post_id'] ? $_POST['post_id'] : "NULL";

4º passo – Restringimos a função para filtrar apenas conteúdo de usuários que não tenham permissão de editor:

if( is_user_logged_in() && !current_user_can('edit_others_pages'))

5º passo – Checamos se o usuário está utilizando ação de consulta de imagens na biblioteca:

if( isset( $_POST['action'] ) ){
            // library query
            if( $_POST['action'] == 'query-attachments' ){

6º passo – Alterar a query de acordo com nossa necessidade:

$where .= ' AND (post_author=' . get_current_user_id() . ' OR post_parent=' . $id .')';
return $where;

No 6º passo filtramos na cláusula where da query conteúdo do autor logado ou que esteja vinculado ao post que ele está consultando.

O que acontece se o usuário for na biblioteca de mídia devido a essa alteração?
R: Como não haverá id de post na página da biblioteca serão trazidos apenas conteúdo que tenha sido enviado pelo usuário logado no sistema.

Código completo para referência:

add_filter( 'posts_where', 'attachments_wpquery_where', 10, 2 );
function attachments_wpquery_where( $where ){            
    $id = $_POST['post_id'] ? $_POST['post_id'] : "NULL";
    if( is_user_logged_in() && !current_user_can('edit_others_pages')){        
        if( isset( $_POST['action'] ) ){
            // library query
            if( $_POST['action'] == 'query-attachments' ){
                $where .= ' AND (post_author=' . get_current_user_id() . ' OR post_parent=' . $id .')';
            }
        }
    }    
    return $where;
}