WordPress Post Not Appearing on Front End After Publishing

You write a post. You hit "Publish." WordPress shows a green checkmark: "Post published." You go to the homepage to see it. It's not there.

You check the blog archive page. Not there either.

You go to Plugins > All Posts and search for it. It's definitely there. The status shows "Published." But it's completely invisible on the front end.

This happened to a client Tuesday morning. They published a time-sensitive announcement that needed to go live immediately. Five minutes later, they realized the post wasn't visible. By the time we figured out why, they'd lost 30 minutes—and it was a post about a time-limited sale.

The issue turned out to be a plugin filtering posts. Took us 15 minutes to find, 5 seconds to fix. But those 30 minutes cost them.

The post wasn't broken. The site wasn't broken. Something was just hiding the post from the front end. Here's how to find it.


Quick Checklist: 90% of Cases Are These 5 Things

Before you dig deep, check these first:

  • ✓ Is the post date in the future? (It's scheduled, not published now)
  • ✓ Is the post status "Draft" not "Published"? (You forgot to click Publish)
  • ✓ Is the post marked as "Private"? (Only logged-in users can see it)
  • ✓ Is the post in a category that's excluded from loops? (Category setting in theme)
  • ✓ Is there a plugin filtering posts? (SEO plugin, post restriction plugin)

If none of these are true, keep reading. We'll dig deeper.


Step 1: Verify the Post is Actually Published

Check in WordPress admin

  1. Go to Posts > All Posts
  2. Look for your post
  3. Confirm the status shows "Published" (not Draft, Pending, Scheduled, etc.)
  4. Check the publication date—is it today or in the past? (Not a future date)

If status is "Draft": You didn't publish it. Click the post and hit "Publish" button.

If status is "Scheduled": The post is set for a future date. It will publish automatically at that time. This is working as intended.

If status is "Pending": The post needs admin approval before it shows. Go to edit it and change status to "Published."

Check if you're logged in as the right user

You might have multiple user accounts. Confirm you're publishing as Admin or Editor, not as a Subscriber (who can't publish).


Step 2: Check Post Visibility Settings

Private vs Public

  1. Go to Posts > All Posts
  2. Click on your post to edit it
  3. Look for "Visibility" or "Status" section (right side of Gutenberg editor, or below Classic Editor)
  4. Make sure it says "Public" not "Private"

If set to Private: Only logged-in users can see it. Change to "Public" to make it visible to everyone.

If set to "Password Protected": Visitors need a password to see it. Change to "Public" if you want it visible.

Check if the post is in the Trash

  1. Go to Posts > All Posts
  2. Click "Trash" to view trashed posts
  3. Is your post there?

If yes: Click "Restore" to bring it back to Published status.


Step 3: Check Category/Taxonomy Settings

Is the post assigned to a category?

  1. Edit the post
  2. Look for "Categories" box (right side of editor)
  3. Is the post assigned to at least one category?
  4. If not assigned to any category, WordPress displays it in "Uncategorized" (if enabled)

Some themes hide "Uncategorized" posts. Try assigning the post to an actual category.

Is the category excluded from loops?

Some themes have settings to exclude certain categories from the blog loop:

  1. Go to Appearance > Customizer (or Customize)
  2. Look for "Blog" or "Posts" settings
  3. Is there an option for "Exclude Categories"?
  4. If the post's category is listed there, that's your problem

Fix: Remove the category from the exclusion list, or assign the post to a different category.

Is the post assigned to a private taxonomy?

Some custom post types use private taxonomies. If the post is only assigned to hidden tags or categories, it might not show:

  1. Edit the post
  2. Check all taxonomy boxes (Tags, Categories, Custom Taxonomies)
  3. Make sure at least one public term is assigned

Step 4: Check Blog Settings

What page is set as "Posts page"?

  1. Go to Settings > Reading
  2. Look for "Your home page displays"
  3. Is it set to "Your latest posts" or a specific "Posts page"?
  4. If it's set to a specific page, go to that page and check if the post shows there

If "Your latest posts": Posts should show on the homepage.

If set to a specific Posts page: Posts only show on that page, not the homepage.

Is the post query set to show posts from all authors?

Some themes let you filter posts by author in the customizer:

  1. Go to Appearance > Customizer
  2. Look for "Posts" or "Blog" settings
  3. Is there a filter for "Author"? Does it exclude the post's author?

Step 5: Check for Plugin Interference

A plugin might be filtering posts and hiding this one.

Test by deactivating plugins

  1. Go to Plugins > All Plugins
  2. Deactivate all plugins
  3. Check the front end—does the post appear now?
  4. If yes, a plugin is hiding it
  5. Reactivate plugins one-by-one, checking after each
  6. When the post disappears again, you've found the culprit

Switch to default theme

A theme might be filtering posts:

  1. Go to Appearance > Themes
  2. Activate a default theme (Twenty Twenty-Four, etc.)
  3. Check the front end—does the post appear?
  4. If yes, your current theme is the issue
  5. Switch back and contact the theme developer

Common plugins that filter posts

  • SEO plugins (Yoast, RankMath): Can hide posts marked as "noindex" or unpublished in their internal settings
  • Access control plugins: Can restrict posts by user role or membership
  • Post scheduling plugins: Can hide scheduled posts from queries
  • Content drip plugins: Hide posts until users have taken an action
  • Private content plugins: Hide posts behind paywalls or login
  • Performance plugins: Cache issues can hide recent posts
  • Custom post type plugins: Might interfere with query vars

Step 6: Check Cache

A caching plugin might be showing you old content that doesn't include the new post.

Clear all caches

  1. If using WP Super Cache, go to the plugin and click "Delete Cache"
  2. If using LiteSpeed Cache, go to Caching and click "Clear"
  3. If using W3 Total Cache, click "Empty All Caches"
  4. Go to your hosting control panel and clear any server-level cache
  5. Clear your browser cache (Ctrl+Shift+Delete)
  6. Try viewing the post in Incognito mode (bypasses browser cache)

If the post appears after clearing cache: The cache was stale. Make sure auto-purging is enabled in your caching plugin settings so future posts purge the cache automatically.


Step 7: Check Query Filters in Theme

The theme might have custom code that filters which posts to show.

Check the theme's index.php or home.php

Via FTP or hosting file manager:

  1. Navigate to wp-content/themes/yourtheme/
  2. Look for files: index.php, home.php, archive.php
  3. Download one and search for code that filters posts
  4. Look for lines with: exclude, include, category__not_in, tax_query
  5. These lines might be excluding your post's category or status

Example problematic code:

'category__not_in' => array( 5, 7 ) // Excludes categories 5 and 7

If your post is in category 5, it won't show.

Fix: Contact the theme developer or hire a developer to adjust the filter.


Step 8: Check Post Status and Post Type

Confirm the post type is "post"

Some sites use custom post types (portfolio, case study, testimonial, etc.). If your post is a custom post type, it might not show in the regular blog loop:

  1. Edit the post
  2. Look at the URL: yoursite.com/wp-admin/post.php?post=123
  3. Check the breadcrumbs or title bar to see what type of post it is
  4. If it says "Portfolio" or something custom, it's a custom post type
  5. Custom post types have their own archives and loops
  6. Check if there's a portfolio archive page or custom loop

Check post_meta for hidden statuses

Some plugins store visibility info in post metadata:

  1. Go to your hosting control panel and open phpMyAdmin
  2. Select your WordPress database
  3. Find the wp_postmeta table
  4. Search for your post ID in the post_id column
  5. Look for meta_keys with names like: _visibility, _exclude_from_search, _restrict_access
  6. If you find these, a plugin is hiding the post in its own settings

Fix: Edit the post in the admin and check the plugin's settings for visibility/restriction options.


Step 9: Check Homepage/Blog Page Settings

Is your post showing up on the archive but not the homepage?

  1. Go to yoursite.com/blog (or yoursite.com/posts)
  2. Does the post show there?
  3. If yes on archive but not homepage, the homepage is set to a static page
  4. Go to Settings > Reading and confirm your homepage is a static page
  5. If the "Posts page" is set differently, posts might not show on homepage

Is the post showing on archive but nowhere else?

WordPress might be set to show the post on category archives but not the homepage:

  1. Check Settings > Reading again
  2. Look for any blog/post settings that control display
  3. Make sure the homepage and archive settings match

Step 10: Check for Sticky Post Conflicts

Is the post marked as sticky?

  1. Go to Posts > All Posts
  2. Hover over the post
  3. Do you see a "Stick to front page" or "Make sticky" link?
  4. If you see "Unstick from front page," it's marked as sticky

Sticky posts show separately. Some themes display them in a featured section, then other posts below. If the sticky post section isn't working properly, the post might not show at all.

Fix: Try unsticking the post and republish. Or check if your theme has a featured posts section that's breaking.


Step 11: Check Database Directly

If everything else checks out, verify the post is actually in the database.

Via phpMyAdmin

  1. Open phpMyAdmin from your hosting control panel
  2. Select your WordPress database
  3. Go to wp_posts table
  4. Click "Browse"
  5. Search for your post by ID or title
  6. Verify:
    • post_status = "publish"
    • post_date is today or past
    • post_date_gmt is not in the future
    • post_name is not empty (URL slug)

If post_status is anything other than "publish": Update it manually:

UPDATE wp_posts SET post_status = 'publish' WHERE ID = 123;

Replace 123 with your post ID.


Step 12: Enable Debug Logging and Watch the Query

If the post still doesn't show, log what's happening when WordPress queries posts:

Enable query logging

  1. Edit wp-config.php
  2. Add:
    define( 'WP_DEBUG', true );
    define( 'WP_DEBUG_LOG', true );
    define( 'SAVEQUERIES', true );
  3. Save and upload

Check the queries

  1. Visit the homepage or blog page
  2. Download wp-content/debug.log
  3. Search for SQL queries that select from wp_posts
  4. Look for the WHERE clause—what's it filtering for?
  5. Does your post match those criteria?

Example suspicious query:

SELECT * FROM wp_posts WHERE post_status = 'publish' AND category NOT IN (5, 7)

If your post is in category 5, this query excludes it.


Real-World Post Not Appearing Story

Scenario: A real estate site published a new property listing. It showed as published in admin. But it didn't appear on the listings page or homepage. The agent called in frustrated.

What we found:

  1. Post was published ✓
  2. Post was public ✓
  3. Post was assigned to a category ✓
  4. But the WP All Export/Import plugin had a custom filter set to only show listings updated in the past 30 days
  5. This listing was new, but a previous version from 6 months ago existed
  6. The plugin's logic was checking when the post was "first created" (6 months ago), not "last updated" (today)
  7. So the listing got filtered out

Our fix: Disabled the plugin's date filter. Listing appeared immediately.

Total debugging time: 25 minutes (10 to check basic settings, 15 to realize the plugin was the culprit).


Post Not Appearing Checklist

Post missing from front end?

  • ✓ Confirm status = "Published" (not Draft, Scheduled, Private)
  • ✓ Confirm post date is today or past (not future)
  • ✓ Confirm visibility = "Public" (not Private or Password Protected)
  • ✓ Confirm post is assigned to a category
  • ✓ Check if category is excluded in theme settings
  • ✓ Clear all caches (plugin cache, server cache, browser cache)
  • ✓ Deactivate all plugins and test
  • ✓ Switch to default theme and test
  • ✓ Check database: post_status, post_date, post_name
  • ✓ Enable debug logging and check the SQL queries

If still not appearing:

  • ✓ Contact the theme developer (might be custom filtering)
  • ✓ Contact the plugin developer (if plugin was interfering)
  • ✓ Check with hosting provider (might be their own filtering/security)

Prevention: Avoid Posts Disappearing

1. Always preview before publishing

Click "Preview" before "Publish." Make sure you can see the post on the site.

2. Check the front end immediately after publishing

Don't wait 30 minutes. Publish and immediately check the homepage. If it's missing, you'll know right away.

3. Test new plugins on staging first

Before installing a new plugin on production, test it on staging. Make sure it doesn't filter or hide posts.

4. Keep a log of posts published

Maintain a document of posts published and when. If one goes missing, you can reference when it was published and look for what changed around that time.

5. Don't rely on auto-publish

If you schedule posts to auto-publish, check them when they go live. Scheduled posts sometimes don't trigger correctly.


The Real Talk

A post not appearing on the front end is almost never a WordPress core bug. It's always one of these:

  1. The post isn't actually published (wrong status or date)
  2. A plugin is filtering it out
  3. A theme is excluding the category
  4. Cache is showing old content
  5. A setting somewhere is hiding it

The frustrating part is that WordPress admin shows the post as published, but the front end doesn't. It feels broken. It's not. It's just that something between "database" and "front end" is intercepting it.

Work through the steps methodically. Test the basics first (status, visibility, category). Test one variable at a time (deactivate plugins individually, switch themes). Check debug logs and database queries to see exactly what's being filtered.

99% of the time, you'll find the issue. And 99% of the time, it's something simple you can fix in 2 minutes once you know what it is.