Silvio Tenfen Junior

Permitindo que assinantes possam ler posts privados no WordPress

Por estranho que possa parecer, por padrão no WordPress, usuários assinantes não podem ler posts privados. Teve um dia que precisava fazer isso e pesquisei muito até chegar ao plugin do WordPress chamado Members. Ele permite que você possa especificar as permissões de cada nível de usuário (ler, publicar e remover posts, adicionar usuários, etc).

Após instalar o plugin, vá em Usuários > Roles. Na linha do Subscriber (Assinante), selecione a opção Edit. Aparece uma lista enorme de permissões que você pode oferecer para os assinantes. No meu caso, eu apenas selecionei a opção read_private_posts (ler posts privados). Clique em Update Role.

Agora, os usuários assinantes podem ler posts privados, mas os mesmos não estão sendo listados na lista de Posts Recentes… Neste caso, é necessário mexer no código do WordPress em wp-includes/default-widgets.php. No meu caso, na versão 3.3.1 do WordPress, cheguei até a linha 543. A linha filtra os posts que deverão aparecer em Posts Recentes.

$r = new WP_Query(array('posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true));

Mantive a mesma linha e adicionei alguns códigos a mais. No caso abaixo, caso algum usuário esteja logado, o filtro irá permitir a exibição de posts privados.

$r = new WP_Query(array('posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true));
if (is_user_logged_in()) {
            $r = new WP_Query(array('posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'post_status' => 'private', 'ignore_sticky_posts' => true));
}
Sair da versão mobile