WordPress allow you to create password protected posts. En av våra läsare frågade nyligen om det var möjligt att dölja lösenordsskyddade post från sajten. Som standard döljer WordPress innehållet i ett lösenordsskyddat inlägg, men det visar fortfarande postens titel med prefixet ”Protected”. I den här artikeln visar vi dig hur du döljer lösenordsskyddade posts från WordPress-slingan.
Varför dölja password-skyddade posts i WordPress?
Som standard visar WordPress det lösenordsskyddade inlägg et med dess rubrik och ett ”protected”-prefix. Användare måste enter passwordet för att kunna viewa innehållet i posten.
Rubriken för inlägget är synlig på homepage, archives, widget för senaste inlägg etc. Om du vill hålla en del content helt privat är detta ej en idealisk lösning.
Eller ej, användare som inte har password kan se rubriken på posten, de kan också försöka enter lösenord. Som vi alla vet kan lösenord knäckas.
Med det sagt, låt oss ta en titt på hur du döljer dina lösenordskyddade posts från WordPress loop så att andra användare inte kan se dem.
Dölja password-skyddade posts i WordPress
Lägg bara till den här koden i functions.php-filen i ditt theme eller i ett site-specifikt plugin.
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' );
Denna kod ändrar helt enkelt den sökning som skickas till WordPress genom att använda posts_where-filtret
. Den ber WordPress att hämta alla posts som ej har ett password.
Besök din website och du kommer att se att password-skyddade posts inte längre är synliga på homepage, archives eller i widgets som gillar senaste inlägg.
Du kan fortfarande besöka posten genom att komma åt den via en direkt URL till själva posten.
I exemplet ovan döljs password-skyddade posts från alla användare. Tänk om du run en multi-site WordPress och vill att skyddade poster ska kunna visas av användare med capability att edit privata posts?
Ändra helt enkelt koden ovan med en annan villkorsstyrd tagg, som den här:
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' );
I det här exemplet kontrollerar vi om en användare inte kan edit de lösenordsskyddade posterna, och visar sedan bara de posts som inte har lösenord. På så sätt kommer alla användare med användarrollerna administratör och editor att se de lösenordsskyddade posterna på front end av din site.
Vi hoppas att den här artikeln hjälpte dig att dölja lösenordsskyddade posts från WordPress loop på din site. Du kanske också vill se vår tutorial om hur du ändrar prefixet för privata och skyddade posts i WordPress.
Om du gillade den här artikeln, vänligen prenumerera på vår YouTube-kanal för WordPress video tutorials. Du kan också hitta oss på Twitter och 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
Administratör
Rahul Rana
This was very helpful. Thank you very much
WPBeginner Support
You’re welcome glad our guide was helpful!
Administratör
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.
Administratör
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.