A WordPress scheduled post usually shows “Missed Schedule” because WP-Cron did not run at the right time, the site timezone is wrong, or a cache/security/hosting rule blocked the cron request. First, publish the missed post manually if it is time-sensitive, then check Site Health before changing plugins or server settings.
Quick checks before changing anything
Open Posts > All Posts and find the missed post. If it should already be public, click Quick Edit, change the status to Published, and save. This fixes the immediate content problem without touching site configuration.
Then check the site clock:
- Go to Settings > General.
- Confirm the Timezone matches the audience or editorial calendar.
- Save changes if you update it.
WordPress uses this setting to calculate scheduled publish times; the official General Settings documentation covers where the timezone setting lives and what it controls.
Check Site Health for cron warnings
Go to Tools > Site Health and review the Status tab. WordPress can flag problems such as missed scheduled events, failed loopback requests, or REST API issues. Those warnings matter because WordPress cron depends on normal site requests to trigger scheduled tasks.
The WordPress Site Health screen documentation explains where to find the status checks and how WordPress groups critical issues, recommended improvements, and passed tests.
Use this decision path:
| What Site Health shows | What to do next |
|---|---|
| Missed scheduled events | Check caching, security rules, and hosting cron below. |
| Loopback request failure | Ask the host to confirm the site can request its own wp-cron.php URL. |
| REST API or fatal error warning | Temporarily disable the plugin named in the warning, or check error logs. |
| No cron-related warning | Look for low traffic, disabled WP-Cron, or plugin-specific scheduling problems. |
Why WP-Cron misses scheduled posts
WordPress does not run a constant background scheduler by default. Its cron system runs when the site receives traffic, then checks whether scheduled tasks are due. The official Plugin Handbook page on WP-Cron describes this request-triggered behavior.
That means missed posts are more likely when:
- The site has very low traffic around the scheduled time.
- A page cache, firewall, or security plugin blocks cron requests.
DISABLE_WP_CRONis set inwp-config.phpwithout a replacement server cron.- A plugin or theme error stops scheduled tasks.
- The site timezone differs from the editor’s intended schedule.
Safest fix order
1. Clear cache and exclude cron from blocking rules
If the site uses a caching, performance, firewall, or security plugin, clear the cache first. Then check whether the plugin has settings that block background requests, loopback requests, REST API requests, or wp-cron.php.
Do not disable every performance feature at once. Change one setting, schedule a test post a few minutes ahead, and confirm whether it publishes. If it does, keep the narrow fix and leave the rest of the cache configuration alone.
2. Check whether WP-Cron was disabled
Use SFTP, your hosting file manager, or your host’s WordPress tools to inspect wp-config.php. Look for this line:
define( 'DISABLE_WP_CRON', true );
If that line exists, WordPress will not run its normal request-based cron. That is fine only when the host has created a real server cron job to call WordPress cron regularly.
If you did not intentionally set up server cron, remove that line or change it to:
define( 'DISABLE_WP_CRON', false );
Before editing wp-config.php, download a backup copy. If the site breaks after the edit, restore the original file by SFTP or the hosting file manager.
3. Ask the host to add a real cron job for low-traffic sites
For small sites, private sites, staging sites, or sites with traffic spikes far away from scheduled publish times, a server cron is often more reliable than waiting for a visitor.
Ask your host to run WordPress cron every 5 to 15 minutes. Many hosts have a cron-job panel; managed WordPress hosts may expose this as a built-in setting or handle it for you.
A typical server cron calls:
*/10 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Replace https://example.com with the site URL. Do not add this yourself if the host already manages WordPress cron, because duplicate cron triggers can cause noisy logs or plugin task overlap.
4. Look for plugin-specific scheduled tasks
Some plugins use WordPress cron for newsletters, backups, SEO scans, ecommerce jobs, image processing, and security checks. If missed posts started after installing or updating a plugin, check that plugin’s logs or settings first.
A practical test is to schedule a plain test post while temporarily disabling only the most likely plugin, such as a cache, security, editorial calendar, or post-scheduling plugin. If the test post publishes, re-enable the plugin and review its settings instead of leaving it disabled permanently.
Optional SSH check with WP-CLI
If you have SSH access, WP-CLI can show whether cron events are overdue:
wp cron event list --fields=hook,next_run_relative,recurrence
Look for many events showing now or overdue times. One or two due events can be normal; a long list that never clears points to cron not running, loopback requests failing, or a fatal error interrupting scheduled tasks.
WP-CLI is useful for diagnosis, but it is not required for most site owners. Use Site Health and hosting support first if you do not normally manage the site over SSH.
Confirm the fix worked
Create a temporary test post and schedule it 5 to 10 minutes ahead using the same timezone shown in Settings > General. Leave the site alone until the scheduled time passes, then refresh Posts > All Posts.
The fix is working when:
- The test post changes from Scheduled to Published.
- Site Health no longer reports missed scheduled events.
- Future scheduled posts publish without manual intervention.
Delete the test post after confirming the result.
When to contact hosting support
Contact the host if Site Health reports loopback request failures, cron events keep piling up, or wp-cron.php returns a firewall, timeout, redirect, or authentication challenge. Ask them to check whether server security rules, basic authentication, CDN rules, or bot protection are blocking WordPress from calling its own cron URL.
If the host confirms cron is reachable and scheduled posts still miss their time, collect the approximate missed publish time, the post ID or title, and any PHP error-log entries from that window. That gives plugin or theme support enough context to find the task that interrupted publishing.