WordPress umożliwia tworzenie wpisów zabezpieczonych hasłem. Niedawno jeden z naszych czytelników zapytał, czy możliwe jest ukrycie wpisów zabezpieczonych hasłem na witrynie. Domyślnie WordPress ukrywa treść wpisu zabezpieczonego hasłem, ale nadal wyświetla tytuł wpisu z prefiksem „Zabezpieczony”. W tym artykule pokażemy, jak ukryć wpisy zabezpieczone hasłem z pętli WordPress.
Dlaczego warto ukrywać wpisy zabezpieczone hasłem w WordPress?
Domyślnie WordPress wyświetla wpisy zabezpieczone hasłem z tytułem i prefiksem „zabezpieczony”. Użytkownicy będą musieli wpisz hasło, aby zobaczyć treść wpisu.
Ten tytuł wpisu jest widoczny na stronie głównej, w archiwum, widżecie ostatnich wpisów itp. Jeśli chcesz, aby niektóre treści były całkowicie prywatne, nie jest to idealne rozwiązanie.
Nie tylko użytkownicy, którzy nie mają hasła, mogą zobaczyć tytuł wpisu, ale mogą również próbować wpisz hasła. Jak wszyscy wiemy, hasła można złamać.
Mając to na uwadze, przyjrzyjmy się, jak ukryć twoje wpisy zabezpieczone hasłem przed pętlą WordPress, aby inni użytkownicy nie mogli ich zobaczyć.
Ukrywanie wpisów zabezpieczonych hasłem w WordPressie
Wystarczy dodać ten kod do pliku functions. php twojego motywu lub wtyczki specyficznej dla witryny.
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' );
.
Ten kod po prostu modyfikuje zapytanie wysyłane do WordPressa za pomocą filtra posts_where
. Prosi WordPressa o pobranie wszystkich wpisów, które nie mają hasła.
Przejdź na swoją witrynę internetową, a zobaczysz, że wpisy zabezpieczone hasłem nie są już widoczne na stronie głównej, w archiwach ani w widżetach, takich jak ostatnie posty.
Nadal można przejść na wpis, uzyskując do niego bezpośredni adres URL.
Powyższy przykład ukrywa zabezpieczone hasłem wpisy przed wszystkimi użytkownikami. Co jeśli prowadziłeś witrynę WordPress z wieloma autorami i chciałeś, aby zabezpieczone wpisy były widoczne dla użytkowników z możliwością edycji prywatnych wpisów?
Wystarczy zmodyfikować powyższy kod za pomocą innego tagu warunkowego, takiego jak ten:
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' );
.
W tym przykładzie sprawdzamy, czy użytkownik nie może edytować wpisów zabezpieczonych hasłem, a następnie pokazujemy tylko wpisy, które nie mają hasła. W ten sposób wszyscy użytkownicy z rolami administratora i edytora zobaczą wpisy zabezpieczone hasłem na front-endzie twojej witryny.
Mamy nadzieję, że ten artykuł pomógł ci ukryć wpisy zabezpieczone hasłem przed pętlą WordPress na twojej witrynie. Możesz również zapoznać się z naszym poradnikiem na temat zmiany prefiksu prywatnych i zabezpieczonych wpisów w WordPress.
Jeśli podobał Ci się ten artykuł, zasubskrybuj nasz kanał YouTube, aby zobaczyć poradniki dotyczące filmów WordPress. Możesz nas również znaleźć na Twitterze i 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
Administrator
Rahul Rana
This was very helpful. Thank you very much
WPBeginner Support
You’re welcome glad our guide was helpful!
Administrator
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.
Administrator
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.