How To Fix The Missed Schedule Post Error In WordPress
Last modified: November 2, 2026
WordPress has a built-in task scheduler called WP-Cron. Unlike a real server cron job that fires at a set time regardless of what your site is doing, WP-Cron runs only when someone visits your site. WordPress checks its queue of pending tasks on every page load and runs anything that is overdue.
The problem: if nobody visits your site at the exact minute a post is scheduled to publish, WordPress never gets the signal to fire. Your post sits in “Scheduled” status, misses its window, and earns a “Missed Schedule” label in your dashboard. On low-traffic sites, early-morning schedules, or hosting environments that block WP-Cron, this happens constantly. Here is how to find the affected posts and fix the root cause for good.
How Missed Schedule Posts Appear in WordPress
When WordPress fails to publish a scheduled post on time, it does not silently move the post to drafts or send you an alert. Instead, it adds a “Missed Schedule” status notice next to the post title in your post list. The post stays in a broken “future” limbo: it has a past publish date but is still not live on your site.
To find every post stuck in this state, go to your WordPress admin and visit this URL directly:
https://yoursite.com/wp-admin/edit.php?post_status=future&post_type=post
This lists all posts still marked as “future,” including any that have already missed their schedule. Scroll through the list and look for any post with a publish date in the past. Those are your problem posts.
To fix stuck posts one at a time, open the post editor, change the status to “Published” manually, and click Update. For a bulk fix, select the affected posts in the list, choose “Edit” from the Bulk Actions dropdown, set Status to “Published,” and click Update. WordPress will publish them immediately.
That handles the backlog. The sections below fix the root cause so future scheduled posts publish correctly.
How to Check if WP-Cron Is the Problem
Before changing your site configuration, confirm that WP-Cron is actually failing. The free WP Crontrol plugin is the fastest way to do this. Install it from the WordPress plugin directory, then go to Tools > Cron Events. You will see a full list of every scheduled WordPress task, when each one last ran, and when each one is next due.
Look for the wp_publish_future_post event. If it shows a “next run” time that is already in the past, WP-Cron is not firing on schedule. If the event is missing entirely, something is actively blocking WP-Cron on your server.
A quick secondary test: add this line to your wp-config.php temporarily, then reload your site front page once.
define('ALTERNATE_WP_CRON', true);
If your scheduled posts start publishing after that change, WP-Cron was failing because of a server configuration issue, usually related to how WordPress fires loopback HTTP requests to itself. The three fixes below give you progressively more reliable solutions, starting with the simplest.
Three Fixes for the Missed Schedule Error
Start with Fix 1 if you want the quickest option. Move to Fix 3 if the problem keeps recurring or you run a low-traffic or staging site.
Fix 1: Use a Plugin to Catch Missed Posts
The WP Missed Schedule plugin, available free in the WordPress plugin directory, runs a check on every page load and immediately publishes any post that has passed its scheduled time. It does not fix the underlying WP-Cron problem, but it is a reliable safety net that takes about two minutes to set up.
To install it:
- Go to Plugins > Add New in your WordPress admin.
- Search for “WP Missed Schedule.”
- Click Install Now, then Activate.
- No configuration is needed. The plugin works automatically from that point on.
Alternatively, if you already have WP Crontrol installed for diagnosis, it includes a “Run Now” button next to each scheduled event. You can use this to manually force-fire wp_publish_future_post when a post gets stuck. This is more of a one-time rescue tool than a permanent fix, but it is useful to know about.
Fix 2: Enable ALTERNATE_WP_CRON in wp-config.php
On some servers, WordPress fires WP-Cron by making a loopback HTTP request back to itself. If your server blocks those internal requests (common on certain shared hosts and some security configurations), WP-Cron fails silently every single time.
The ALTERNATE_WP_CRON constant changes how WordPress triggers the cron system. Instead of a loopback request, it redirects the browser to run the cron job in the background on the next page load. Less elegant than a real cron job, but it works when loopbacks are blocked.
To enable it, open wp-config.php in your site’s root directory and add this line before the /* That's all, stop editing! */ comment:
define('ALTERNATE_WP_CRON', true);
Save the file. The change takes effect immediately without any restart. If your posts start publishing on schedule after this, your host was blocking loopback requests. Leave the constant in place.
SiteGround: SiteGround’s caching layer can interfere with WP-Cron loopback requests. Try clearing your cache first. If posts are still missing after a cache clear, add ALTERNATE_WP_CRON.
Cloudways: On Cloudways you can configure a real server cron job through the platform dashboard under your application’s Cron Job Manager. That is a better long-term fix than ALTERNATE_WP_CRON on Cloudways, since the platform gives you direct cron access.
WP Engine: WP Engine disables WP-Cron entirely and replaces it with a real server-side cron job that runs every 15 minutes. You should not need this constant on WP Engine. If scheduled posts are still missing on WP Engine, check your user portal for cron job status or contact their support team.
Fix 3: Replace WP-Cron with a Real Server Cron Job
This is the most reliable fix available. It tells your server’s actual cron system (not WordPress) to ping wp-cron.php on a fixed schedule, independent of whether anyone is visiting your site. WordPress receives the trigger and runs its task queue as intended.
First, disable the built-in WP-Cron so it does not also fire on page loads, which wastes server resources once a real cron job is running. Add this to wp-config.php:
define('DISABLE_WP_CRON', true);
Method A: cPanel (no command line needed)
- Log in to your cPanel account.
- Find the Cron Jobs section, usually listed under Advanced.
- Under “Add New Cron Job,” set the frequency to every 15 minutes. Type
*/15in the Minute field and*in all other fields, or use the “Once Per 15 Minutes” preset if your host offers one. - In the Command field, enter the following (replace
yoursite.comwith your actual domain):
wget -q -O - https://yoursite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
- Click Add New Cron Job. The entry saves and starts running on the next 15-minute interval.
Method B: SSH (command line access required)
If you have SSH access to your server, connect and run:
crontab -e
Add this line to the crontab file:
*/15 * * * * wget -q -O - https://yoursite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Save and exit. In vi that is :wq; in nano it is Ctrl+X then Y. Run crontab -l to confirm the entry saved correctly.
If your server has curl but not wget, use this version instead:
*/15 * * * * curl -s "https://yoursite.com/wp-cron.php?doing_wp_cron" > /dev/null 2>&1
WordPress Multisite note: On a multisite network, WP-Cron fires for the main site only by default. Each subsite that needs reliable scheduling should have its own cron entry pointing to that subsite’s domain, or you can use WP Crontrol to manage cron events across the network from a central location.
How to Verify Your Fix Is Working
After applying any of the fixes above, confirm it is actually working before considering the job done.
Test with a scheduled post: Create a new draft post and schedule it for two or three minutes from now. Wait for that time to pass, then reload your post list. If the post shows as “Published” rather than “Missed Schedule,” your fix is working correctly.
Check WP Crontrol: Go back to Tools > Cron Events and look at the next run time for wp_publish_future_post. If it updated within the last 15 minutes, WP-Cron is firing on schedule. You can also click the “Run Now” button next to the event to trigger it manually and confirm there are no PHP errors.
Check the server cron log (Fix 3 only): If you set up a real server cron job, give it 15 minutes to run, then check your server’s cron log. On most Linux servers, run:
grep CRON /var/log/syslog | tail -20
You should see a recent entry for the wget or curl command you added. If the log shows the command ran but posts are still not publishing, double-check that DISABLE_WP_CRON is in your wp-config.php and that the cron entry is pointing to the correct domain.
Common Questions About the Missed Schedule Error
Why does this only happen sometimes and not on every scheduled post?
WP-Cron fires on page visits, so posts scheduled during high-traffic periods often publish without issues because a visitor happens to load the site at the right moment. Posts scheduled overnight, on weekends, or during traffic dips miss their window far more often. Fix 3 removes the dependency on visitor traffic entirely by giving WordPress an external trigger on a fixed timer.
Does a missed schedule affect the post URL or metadata?
No. The slug, title, categories, tags, and all other metadata are set when you first create the scheduled post. A missed schedule does not change any of that. When the post finally publishes (whether manually or after applying a fix), it uses the same URL WordPress assigned when you scheduled it.
What about posts already stuck in “Missed Schedule”?
Fixing WP-Cron going forward does not automatically publish posts that are already stuck. You need to handle those separately. Use the URL listed earlier in this article (/wp-admin/edit.php?post_status=future&post_type=post) to find them, then bulk-publish them or update each one manually. Once that backlog is cleared, your fix will stop new posts from getting stuck.
Can I still get the missed schedule error on a managed WordPress host?
Yes, though it is less common. Most managed hosts replace WP-Cron with a real server cron job by default, which handles the basic publish trigger reliably. If you are still seeing missed schedules on a managed host, the issue is more likely a plugin conflict or a custom cron event that is throwing a PHP error and halting the queue. WP Crontrol shows PHP errors next to each event and is the fastest way to isolate which one is the problem.
* This button will show the rest of the post and open up an offer from a vendor
Why WordPress Misses Scheduled Posts (and the Plugin Fix)
WordPress’s built-in scheduling system relies on WP-Cron, a pseudo-cron that runs when a visitor hits your site. Unlike a real server cron job, it does not run on a fixed clock schedule. It piggybacks on site traffic. On low-traffic sites, there can easily be a gap of an hour or more between visits, so if a post is scheduled for 9:00 AM and no one visits until 10:00 AM, WordPress never runs the task and the post shows as “Missed Schedule”.
Step 1: Check if WP-Cron is disabled in wp-config.php
First, check whether WP-Cron has been intentionally disabled on your site. Open your wp-config.php file and look for this line:
define( 'DISABLE_WP_CRON', true );
If this line exists and is set to true, WordPress is not running WP-Cron at all, which means no scheduled posts will ever publish automatically. Remove this line or change it to false and test whether scheduled posts work again. (This constant is often added by hosting providers or optimization plugins that recommend replacing WP-Cron with a real server cron. See the next section for that approach.)
Step 2: Use the WP Crontrol plugin to diagnose
The free WP Crontrol plugin (available on the official WordPress plugin repository) lets you see all scheduled events and run them manually. Install it, then go to Tools > Cron Events to see if publish_future_post events are listed and when they are next scheduled. If you can see them, WP-Cron is running but may be delayed by traffic gaps.
Step 3: Install the WP Missed Schedule plugin
The first thing that you need to do is to download, install and activate the plugin WP Missed Schedule (only available for free on GitHub). This plugin looks for posts that have missed the scheduled time that you have set for them. If it finds one, it will publish it at the right time, so all posts are in the correct order.
To save resources on the hosting server, the plugin will conduct the search at set intervals, rather than just constantly running. The default interval is every 10 minutes, but this can be changed to suit your requirements. This is a good short-term fix that patches the missed-post problem without needing server access.
Fix It Permanently: Set Up a Real Server Cron Job
The most reliable long-term fix is to replace WP-Cron with a proper server-side cron job that runs on a real clock schedule, regardless of site traffic. This involves two steps: disabling WP-Cron’s traffic-triggered behavior, and adding a cron job that calls it on a set interval.
Step 1: Disable the built-in WP-Cron
Open your wp-config.php file and add this line before the /* That's all, stop editing! */ comment:
define( 'DISABLE_WP_CRON', true );
This stops WordPress from attempting to run cron on every page load, which also reduces minor performance overhead on high-traffic sites.
Step 2: Add a server cron job
In cPanel, go to Advanced > Cron Jobs. Add a new cron job with this command, replacing yourdomain.com with your actual domain:
*/15 * * * * wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
This runs every 15 minutes. Alternatively, use PHP directly:
*/15 * * * * php /home/yourusername/public_html/wp-cron.php >/dev/null 2>&1
On managed WordPress hosts (Kinsta, WP Engine, Pressable): Most managed hosts do not give direct cron access via cPanel. Instead, they offer a built-in alternative to WP-Cron configured at the server level. Contact your host’s support and ask them to confirm whether WP-Cron is running reliably on your account, or whether they recommend their native cron implementation. Many managed hosts handle this automatically.
Step 3: Verify the fix
After setting up the cron job, test it by creating a draft post and scheduling it 10 to 15 minutes in the future. Watch your site at that time to confirm the post publishes. You can also use WP Crontrol to check the next scheduled run of publish_future_post and manually trigger it from the admin panel to confirm it fires correctly.
With a real cron job in place, scheduled posts will publish reliably at the exact time you set, regardless of how much or how little traffic your site receives.
Final Word: How to Fix the Missed Schedule Post Error in WordPress
If you just need a quick fix, the WP Missed Schedule plugin handles missed posts without any server access. If you want to solve the root cause permanently, disable WP-Cron in wp-config.php and add a real server cron job. That combination eliminates the traffic-dependency problem entirely.
The WP Crontrol plugin is worth keeping active even after you have fixed the issue. It lets you manually trigger scheduled events and confirm that WP-Cron is running, which is useful for testing before a time-sensitive post goes live. After applying any fix, always test with a post scheduled 10 minutes out before relying on it for important content.
One thing to keep in mind if you run a WordPress Multisite network: WP-Cron runs from the primary site and handles scheduled events for all subsites in the network. A broken or overloaded cron on the main site means missed schedule errors can hit every subsite at once. If you manage a Multisite installation, setting up a real server cron job on the primary site is not optional. It is the only way to keep scheduling reliable across the entire network.
Website Maintenance – Use Promocode: scanwp
Advanced JetPlugins for Elementor
Semrush 14 days trial
Kinsta – Managed WordPress Hosting
Bluehost Hosting