O WordPress permite que você crie publicações protegidas por senha. Recentemente, um de nossos leitores perguntou se era possível ocultar as publicações protegidas por senha do site. Por padrão, o WordPress oculta o conteúdo de uma publicação protegida por senha, mas ainda mostra o título da publicação com o prefixo “Protected” (Protegido). Neste artigo, mostraremos como ocultar postagens protegidas por senha do loop do WordPress.
Por que ocultar postagens protegidas por senha no WordPress?
Por padrão, o WordPress exibe a postagem protegida por senha com seu título e um prefixo “protected”. Os usuários precisarão digitar a senha para visualizar o conteúdo da publicação.
Esse título da postagem fica visível na página inicial, nos arquivos, no widget de postagens recentes etc. Se você quiser manter algum conteúdo totalmente privado, esse não é o ideal.
Não apenas os usuários que não têm senha podem ver o título da postagem, mas também podem tentar inserir senhas. Como todos sabemos, as senhas podem ser decifradas.
Dito isso, vamos dar uma olhada em como ocultar suas postagens protegidas por senha do loop do WordPress para que outros usuários não possam vê-las.
Como ocultar publicações protegidas por senha no WordPress
Basta adicionar esse código ao arquivo functions.php do seu tema ou a um plug-in específico do site.
function wpb_password_post_filter( $where = '' ) { if (!is_single() && !is_admin()) { $where .= " AND post_password = ''"; } return $where; } add_filter( 'posts_where', 'wpb_password_post_filter' );
Esse código simplesmente modifica a consulta enviada ao WordPress usando o filtro posts_where
. Ele solicita ao WordPress que busque todos os posts que não tenham uma senha.
Visite seu site e você verá que as publicações protegidas por senha não estão mais visíveis na página inicial, nos arquivos ou em widgets como publicações recentes.
Você ainda pode visitar a publicação acessando-a por meio de um URL direto para a própria publicação.
O exemplo acima oculta as publicações protegidas por senha de todos os usuários. E se você administrasse um site WordPress com vários autores e quisesse que os posts protegidos pudessem ser visualizados por usuários com capacidade de editar posts privados?
Basta modificar o código acima com outra tag condicional, como esta:
function wpb_password_post_filter( $where = '' ) { if (!is_single() && !current_user_can('edit_private_posts') && !is_admin()) { $where .= " AND post_password = ''"; } return $where; } add_filter( 'posts_where', 'wpb_password_post_filter' );
Neste exemplo, verificamos se um usuário não pode editar as postagens protegidas por senha e, em seguida, mostramos apenas as postagens que não têm senha. Dessa forma, todos os usuários com funções de administrador e editor verão as publicações protegidas por senha no front-end do seu site.
Esperamos que este artigo tenha ajudado a ocultar postagens protegidas por senha do loop do WordPress em seu site. Talvez você também queira ver nosso tutorial sobre como alterar o prefixo de publicações privadas e protegidas no WordPress.
Se você gostou deste artigo, inscreva-se em nosso canal do YouTube para receber tutoriais em vídeo sobre o WordPress. Você também pode nos encontrar no Twitter e no Google+.
Rahul Rana
This was very helpful. Thank you very much
WPBeginner Support
You’re welcome glad our guide was helpful!
Administrador
Vincent Zhang
Thank you guys so much. This really helped me. I appreciate it. Please keep more of this type of posts coming that do not involve using a plugin.
WPBeginner Support
When a plugin-free solution is available we will be sure to try to include it.
Administrador
Louis Burkhardt
Thanks. Works great.
Mark
I created a site specific plugin and followed these steps and it worked for hiding my post on the “Posts” page of my site. However, the post is still visible on a Related Posts widget for each individual post. (Very similar to the image you have above, however my Password protected post is still visible.)
Is there anything I can do to fix this?
Alex
I wanted to make my own code adjustment to show the posts if you could read_private_posts.
function remove_password_protected_posts( $where = ” ) {
if (!is_single() && !current_user_can(‘read_private_posts’) && !is_admin() ) {
$where .= ” AND post_password = ””;
}
return $where;
}
add_filter( ‘posts_where’, ‘remove_password_protected_posts’ );
Great post as usual. Thanks.
Harin
Hi guys
I made a site specific plugin with the following code:
If I try to attach a nextgen gallery to my post, the gallery doesn’t load, as soon as I disable the plugin, the nextgen gallery goes back to normal.
Regards
Brandon
Thanks for this snippet. So helpful!
Regarding hiding these posts from the rss feed, I ran across this snippet.
function rss_filter_protected($query) {
if ($query->is_feed) {
add_filter('posts_where', 'rss_filter_password_where');
}
return $query;
}
add_filter('pre_get_posts','rss_filter_protected');
Chris
Thanks for that great tip!
But are these posts hidden from the loop with your code snippet also hidden from the RSS feed?
Louis Burkhardt
Based on a single test, the pw protected post is hidden from the RSS feed.