WordPress Scheduled Posts Not Publishing? How to Fix Missed Schedule Errors
WordPress scheduled posts showing "Missed schedule"? The cause is usually low traffic, blocked loopback requests, or a caching plugin. Here's how to diagnose it by cause.

You schedule a post for 8 a.m. You check at noon. It still says "Missed schedule" next to the title. WordPress knew when the post was due. The scheduled task never ran. That's almost always WP-Cron, not the editor.
Here's how to find the cause—starting with the most common one.
The Usual Suspect: Your Site Isn't Getting Enough Traffic
WP-Cron isn't a real cron. It doesn't run on a clock. It runs when someone visits the site. Every time a page loads, WordPress checks whether any scheduled tasks are due. If nobody visits, nothing runs.
A post scheduled for 2:00 p.m. on a low-traffic site might not publish until 6:00 p.m. when the next visitor triggers the check. On a site with almost no traffic, it might not publish at all.
The official WP-Cron documentation explains the trigger behavior. If the site gets fewer than a few hundred visits per day, this is almost certainly the cause.
The fix: Set up a real server cron job. Ask your host to add a cron entry that calls WordPress every 5 minutes. A typical command:
*/5 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Once the server cron is running and tested, disable the built-in WP-Cron by adding this to wp-config.php:
define( 'DISABLE_WP_CRON', true );
Don't disable WP-Cron until the server cron is confirmed working. If you disable it first, nothing runs at all.
When WP-Cron Is Already Disabled
Open wp-config.php. Look for:
define( 'DISABLE_WP_CRON', true );
If that line exists, WP-Cron is off. That's fine when a real server cron replaces it. If no replacement exists, scheduled posts stop publishing entirely.
Ask your host whether it manages cron for you. Some managed hosts set up a server cron automatically and disable WP-Cron for performance. Others don't. If the host confirms no server cron exists, either set one up or remove the line from wp-config.php to re-enable WP-Cron.
When Something Is Blocking the Trigger
WP-Cron also fires through a loopback request—the site calling itself. If that request fails, scheduled tasks never run.
Go to Tools → Site Health → Status. Look for these exact messages:
- "A scheduled event is late." — WP-Cron is overdue.
- "Your site could not connect to itself." — Loopback failed.
- "The REST API call returned an unexpected result." — Something is blocking
/wp-json/.
Loopback failures usually come from security plugins, Basic Authentication on staging, DNS errors, Cloudflare firewall rules, or a host that blocks requests back to the same domain. Share the exact Site Health message with your host. Don't paraphrase—the wording tells them where to look.
When a Caching Plugin Blocks wp-cron.php
Some caching plugins block wp-cron.php to reduce server load. That works fine when a real server cron is running. It breaks scheduling when it isn't.
Check the caching plugin's settings for a "disable WP-Cron" or "block wp-cron.php" option. If it's enabled and no server cron exists, either turn off the setting or set up a server cron.
Common plugins with this setting: WP Rocket, LiteSpeed Cache, Perfmargin, and some host-specific optimization plugins.
When the Timezone Is Wrong
Go to Settings → General. Confirm the site timezone matches your own. Pick the correct city—not just the UTC offset—so daylight saving changes are handled automatically.
Open the missed post. Check the scheduled date and time. A mismatch between your clock and the site timezone can make a correctly scheduled post appear late. It's rare, but it happens after migrations or when a host changes server time.
When None of That Explains It
Install WP Crontrol. It shows every scheduled event, its next run time, and which ones are overdue. You can run any event manually from the dashboard.
From WP-CLI:
wp cron event list
wp cron event run --due-now
If the due-now command publishes the missed post, the problem is that WP-Cron isn't firing. Go back to the low-traffic or loopback sections.
If it errors, the problem is elsewhere. Check for plugin conflicts on staging. Disable caching, security, and scheduling plugins one at a time. Test a scheduled post after each change.
Don't install a "missed schedule fixer" plugin without finding the real cause. Those plugins add more scheduled jobs and more noise.
What Else Uses WP-Cron
Scheduled posts are just one thing WP-Cron handles. It also runs backups, plugin updates, email queues, and WooCommerce actions like subscription renewals and abandoned cart emails.
After fixing the schedule, check Tools → Scheduled Actions if Action Scheduler is installed. Look for failed or overdue jobs. Then watch the next planned post publish on time before assuming the fix worked.
For Sites That Need Reliable Timing
Stores, membership sites, and news sites can't depend on WP-Cron. It's not reliable enough. Set up a real server cron and disable the built-in version. That's the permanent fix.
For everyone else, WP-Cron is fine—as long as the site gets steady traffic. If it doesn't, a server cron is the answer.
Share





