Image Image Image Image Image
Scroll to Top

Topo

filtro

27

out
2014

Sem Comentários

Em CMS
Wordpress

Por Diogo Teobaldo

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

Em 27, out 2014 | Sem Comentários | Em CMS, Wordpress | Por Diogo Teobaldo

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;
}

Tags | , , , ,