Trusted WordPress tutorials, when you need them most.
Beginner’s Guide to WordPress
WPB Cup
25 Million+
Websites using our plugins
16+
Years of WordPress experience
3000+
WordPress tutorials
by experts

How to Hide Password Protected Posts From WordPress Loop

We’ve heard from several readers who were surprised to learn that WordPress password protection isn’t as private as it seems.

Sure, the content is locked behind a password. But the post titles still show up on your homepage, category pages, and search results.

It’s like locking a diary but leaving the chapter names out in the open. 😱

That’s a problem if you run a membership site or share sensitive business info. Not only does it look messy, but it also hints at what’s hidden behind the scenes. Some curious visitors might even try to access the content just because they know it’s there.

Fortunately, there are ways you can hide these posts completely from public view.

In this guide, I’ll show you the best ways to keep your private content truly private. We’ve tested several methods to remove password-protected posts from WordPress loops – without breaking your site or locking out the people who need access. 🙌

How to Hide Password Protected Posts From WordPress Loop

Why Hide Password-Protected Posts in WordPress?

By default, WordPress displays a password-protected post with its title and the ‘protected’ prefix. Users must enter the password to view the post’s content.

This post prefix is visible on the homepage, in archives, in the recent posts widgets, and in other areas.

Password protected posts displayed on homepage

If you want to keep some content completely private, then this is not ideal for several reasons.

Users who don’t have passwords can still see the post title, which might be a problem in itself. They can also try to get access to the content with a brute-force attack. As we all know, passwords can be cracked.

With that in mind, we’ll show you how to hide your password-protected posts from the WordPress loop so that other users cannot see them. Here’s a quick look at all the steps you’ll take:

Let’s jump right in!

Step 1. Install a Code Snippet Plugin

To make specific changes to your site, some WordPress experts may tell you to add a custom code snippet to your theme’s functions.php file.

We don’t recommend this method as it’s not very beginner-friendly, and you risk breaking your website. Instead, you can use a code snippet plugin, like WPCode, to do the job.

WPCode is the best code snippet plugin on the market. Some of our partner brands use it to add and manage custom code snippets on their websites, and they’ve loved it.

You can find more information about the plugin in our complete WPCode review.

WPCode's homepage

The best part is that you can use the free version of WPCode to add a custom code snippet to your WordPress site.

So, first, go ahead and install and activate the free WPCode plugin. If you need help with the process, then check out our guide on how to install a WordPress plugin.

🧑‍💻 Expert Tip: Unlock advanced features like complete revision history, code scheduling, and access to 100+ expert-approved code snippets when you purchase the premium version of WPCode.

Step 2. Hide Password-Protected Posts in WordPress

Once you’ve activated the plugin, navigate to Code Snippet » + Add Snippet from your WordPress admin area.

Then, simply click on the ‘Add Custom Snippet’ button within the ‘Add Your Custom Code (New Snippet)’ section.

Adding custom code in WPCode

On the next screen, you’ll need to choose the code type for your custom snippet.

For this tutorial, we’ll need to use the ‘PHP Snippet’ option.

Choosing PHP Snippet as the code type

You’ll then be redirected to the custom code snippet editor.

From here, you’ll want to name the custom snippet first. We recommend using a clear name, like ‘Hide Password-Protected Posts.’ This will make organizing your custom code snippets easier down the line.

Next up, simply add the following code to the ‘Code Preview’ box:

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' );

This code modifies the query sent to WordPress by using the posts_where filter. It asks WordPress to fetch all posts that do not have a password.

Here’s what it looks like in the editor:

Code preview for hiding password-protected posts

At this point, you’ll need to toggle the ‘Inactive’ switch to ‘Active.’

Then, go ahead and click ‘Save Snippet.’

Saving snippet for hiding password-protected posts

By default, WPCode will auto-apply the code snippet everywhere on your WordPress site.

Now, if you visit your website, you will see that password-protected posts are no longer visible on the homepage, archives, or in widgets like recent posts.

Protected posts hidden

Keep in mind that you can still visit the post by accessing it through a direct URL.

Bonus Tip: Allowing Access to Protected Posts for Specific Users

The example above hides password-protected posts from all users. But what if you ran a multi-author WordPress site and wanted protected posts to be viewable by users with the capability to edit private posts?

Simply modify the above code with another conditional tag like this:

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 this example, we check if a user cannot edit the password-protected posts and only show the posts that don’t have passwords.

By doing so, all of the WordPress users with administrator and editor roles will see the password-protected posts on the front end of your site.

💡 Insider Tip: Are you tired of customizing and managing your WordPress website all by yourself? The good news is you don’t have to!

With WPBeginner’s WordPress Maintenance & Support Service, our team of experts will make sure your site is up-to-date, create regular backups, provide around-the-clock uptime monitoring, and more!

Book a free consultation call, or check out all our Professional Services today!

FAQs About Hiding Password-Protected Posts in WordPress

Wondering what happens when you hide password-protected posts? Here are some common questions we get from readers, along with clear answers to help you decide if this approach is right for your site.

Why would I want to hide password-protected posts in WordPress?

Hiding password-protected posts helps keep your site looking clean and professional. It also prevents unauthorized visitors from seeing that private content exists, reducing the risk of access attempts and keeping your site more secure.

Can I hide password-protected posts without using code?

Yes! While WordPress offers basic privacy settings, using a plugin like WPCode makes the process easier and more reliable, especially if you’re not comfortable editing code. It gives you more control without needing technical skills.

Will hiding these posts affect visibility for authorized users?

Not at all. Authorized users, such as logged-in members or users with specific roles, can still access the posts directly. As long as they have the correct password or permissions.

Is WPCode the only plugin that can help with this?

WPCode is one of the easiest and most dependable options, which is why we recommend it. That said, there are other plugins available. Just be sure to choose one that’s well-maintained and compatible with your theme and other tools.

Will hiding password-protected posts affect my site’s SEO?

Hiding these posts from your homepage or archives won’t hurt your SEO. In fact, it can improve it by keeping your public-facing content more focused and relevant for search engines.

We hope this article helped you hide password-protected posts from the WordPress loop on your site. You may also want to see our tutorial on how to change the prefix of private and protected posts in WordPress and our guide on different ways to protect content in WordPress.

If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.

Disclosure: Our content is reader-supported. This means if you click on some of our links, then we may earn a commission. See how WPBeginner is funded, why it matters, and how you can support us. Here's our editorial process.

The Ultimate WordPress Toolkit

Get FREE access to our toolkit - a collection of WordPress related products and resources that every professional should have!

Reader Interactions

17 CommentsLeave a Reply

  1. This worked great for the main feed; thank you! I’m having a similar issue as Mark (a few comments up), but with the Recent Posts widget. PW-Protected posts still show in the Recent Posts list.

        • It should hide the password protected posts from your recent posts widget. If you have caching on your site, be sure that you clear it in case you are seeing the cached information for the widget. The other possibility is that something is modifying the query that the widget is using other than our code.

  2. 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.

    • 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

  3. 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.

  4. 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?

  5. 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.

  6. 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

  7. 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');

  8. Thanks for that great tip!
    But are these posts hidden from the loop with your code snippet also hidden from the RSS feed?

Leave A Reply

Thanks for choosing to leave a comment. Please keep in mind that all comments are moderated according to our comment policy, and your email address will NOT be published. Please Do NOT use keywords in the name field. Let's have a personal and meaningful conversation.