WordPress consente di creare post protetti da password. Recentemente uno dei nostri lettori ha chiesto se fosse possibile nascondere i post protetti da password dal sito. Per impostazione predefinita, WordPress nasconde il contenuto di un post protetto da password, ma mostra comunque il titolo del post con il prefisso “Protetto”. In questo articolo vi mostreremo come nascondere i post protetti da password dal ciclo di WordPress.
Perché nascondere i post protetti da password in WordPress?
Per impostazione predefinita, WordPress visualizza il post protetto da password con il titolo e il prefisso “protetto”. Gli utenti dovranno inserire la password per visualizzare il contenuto del post.
Il titolo del post è visibile nella homepage, negli archivi, nel widget dei post recenti, ecc. Se si desidera mantenere alcuni contenuti completamente privati, questo non è l’ideale.
Non solo gli utenti che non hanno la password possono vedere il titolo del post, ma possono anche provare a inserire la password. Come tutti sappiamo, le password possono essere decifrate.
Detto questo, vediamo come nascondere i post protetti da password dal ciclo di WordPress, in modo che gli altri utenti non possano vederli.
Nascondere i post protetti da password in WordPress
È sufficiente aggiungere questo codice al file functions.php del vostro tema o a un plugin specifico per il sito.
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' );
Questo codice modifica semplicemente la query inviata a WordPress utilizzando il filtro posts_where
. Chiede a WordPress di recuperare tutti i post che non hanno una password.
Visitate il vostro sito e vedrete che i post protetti da password non sono più visibili nella homepage, negli archivi o nei widget come i post recenti.
È comunque possibile visitare il post accedendovi tramite un URL diretto al post stesso.
L’esempio precedente nasconde i post protetti da password a tutti gli utenti. E se si gestisse un sito WordPress con più autori e si volesse che i post protetti fossero visualizzabili dagli utenti che hanno la possibilità di modificare i post privati?
Basta modificare il codice precedente con un altro tag condizionale, come questo:
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' );
In questo esempio, controlliamo se un utente non può modificare i post protetti da password, quindi mostriamo solo i post che non hanno una password. In questo modo, tutti gli utenti con i ruoli di amministratore e di editore vedranno i post protetti da password sul front-end del sito.
Speriamo che questo articolo vi abbia aiutato a nascondere i post protetti da password dal ciclo di WordPress sul vostro sito. Potreste anche consultare il nostro tutorial su come cambiare il prefisso dei post privati e protetti in WordPress.
Se vi è piaciuto questo articolo, iscrivetevi al nostro canale YouTube per i video tutorial di WordPress. Potete trovarci anche su Twitter e Google+.
David Brown
Thank you for explaining how to *really* do it in code; I wasn’t expecting that from a site called “wpbeginner.com”! (Still works in 2024 and WP 6.5.2, by the way.)
So many sites pretend to offer solutions but really want you to use their plug-in that overcomplicates some simple thing and leaves your site exposed to any vulnerabilities they might introduce and never patch.
WPBeginner Support
It would depend on the site and plugin as plugins can be for simply adding the same code as code from an article without needing to know how to edit files which is why sites recommend them. Glad you found our site and guide helpful
Admin
Rahul Rana
This was very helpful. Thank you very much
WPBeginner Support
You’re welcome glad our guide was helpful!
Admin
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.
Admin
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.