Directory / plugin
Unlisted Posts
v2.1.0 · by Andy Feliciotti
Add an "Unlisted" toggle to posts and pages. Unlisted content stays viewable by link but is hidden from archives, feeds, search and search engines.
About this plugin
Unlisted Posts adds an “Unlisted” toggle to posts and pages. Switch it on and the post is left out of everywhere WordPress lists content, while anyone with the link can still open it. Handy for sharing a page with clients, publishing documentation you don’t want in your blog feed, or keeping old content reachable without promoting it.
What gets hidden
- Blog home, category, tag, author and date archives
- Search results
- RSS and Atom feeds, including the comments feed
- XML sitemaps: WordPress core, Yoast SEO, Rank Math, All in One SEO, SEOPress and The SEO Framework
- Latest Posts, Query Loop, Page List, Archives, Latest Comments and other blocks and widgets that list content
- Previous / next post links
- WooCommerce shop, product category pages, product search, related products, product blocks and the
[products]shortcode - Public REST API lists (editors still see unlisted posts in the editor’s link search and Parent page picker)
Unlisted posts also send a noindex robots meta tag so search engines drop them (also through Yoast SEO, Rank Math, All in One SEO, SEOPress and The SEO Framework, which print their own robots tag), and the admin lists show an “Unlisted” label next to each one.
Where the toggle lives
- Block editor: the post sidebar’s Summary panel, next to Status and Visibility
- Classic editor and WooCommerce products: a checkbox in the Publish box
The plugin stores a single _unlisted_post post meta value and keeps a small cached list of unlisted IDs, so there is no extra query cost on the front end.
Custom post types
Posts, pages and (when WooCommerce is active) products are supported by default. Add other post types with the unlisted_posts_post_types filter. A post type must support custom-fields for the block editor toggle to save.
add_filter( 'unlisted_posts_post_types', function ( $types ) {
$types[] = 'portfolio';
return $types;
} );