WordPress Scheduled Posts Not Publishing: The Best Fix (2026)
Your post is scheduled at 9 AM; you look again, and it remains “Scheduled” indefinitely, without being posted. The WordPress scheduled posts not publishing issue is a typical problem, although it is not often understood as such, since users think it is an error, whereas in reality, it is an inevitable consequence of the scheduling process in WordPress. Here is what causes it and how you can solve it correctly, including the one solution (crontab on the server), which all articles mention but don’t show how to do.
Why This Happens: Understanding WP-Cron
WordPress doesn’t have a true background scheduling system built in. Instead, it uses something called WP-Cron, which is triggered by visitor traffic every time someone loads a page on your site, WordPress checks if any scheduled tasks (including scheduled posts) are due to run.
This creates an obvious problem: if nobody visits your site around the scheduled time, WP-Cron never fires, and the post doesn’t publish. Low-traffic sites, sites with heavy caching (which can prevent WP-Cron from triggering on every page load), and sites scheduling posts for odd hours (like 3 AM) are the most commonly affected.
Step 1: Check Your Timezone Settings First
This sounds basic, but it’s a frequent, easy-to-miss cause.
- Go to Settings > General
- Check the Timezone setting and confirm it matches your actual location, not just UTC by default
- If your site’s timezone is wrong, “9 AM” in WordPress might not actually be 9 AM in your local time, making it look like posts are publishing “late” when they’re actually publishing correctly for the wrong timezone
Step 2: Clear Your Caching Plugin’s Cache
If you’re using a caching plugin, it can sometimes serve a cached version of a page without triggering the WP-Cron check that normally happens on page load. This is a commonly overlooked cause, especially on well-optimized sites (which is somewhat ironic, since good caching can unintentionally break scheduled publishing).
- Clear your caching plugin’s full cache
- If your caching plugin has an option to exclude
wp-cron.phpfrom caching, enable it
Step 3: Rule Out a Plugin Conflict
Certain plugins (particularly security or performance plugins) can interfere with or completely disable WP-Cron execution.
- Deactivate plugins one at a time
- Test by scheduling a post a few minutes out and watching whether it publishes on time
- If disabling a specific plugin fixes it, check that plugin’s settings for a WP-Cron-related toggle before fully removing it
Step 4: Check for a Malformed Permalink
This is a less common but real cause some site owners have found: an errant character (like a stray apostrophe) in a post’s permalink can interfere with the scheduling process for that specific post. If only one particular post consistently fails to publish while others work fine, check its permalink for unusual characters.
Step 5: Set Up a Real Server Cron Job (The Actual Permanent Fix)
This is the fix that genuinely solves the root cause, rather than working around it, but most articles just say “ask your host to set up a real cron job” without explaining what that actually involves. Here’s the full process:
Why This Fixes It: WordPress scheduled posts not publishing
A real server cron job runs on a fixed schedule at the operating system level, completely independent of whether anyone visits your site. Instead of relying on traffic to trigger WordPress’s scheduling check, the server itself checks on a reliable timer (commonly every 5-15 minutes).
How to Set It Up
Part A: Disable WordPress’s default traffic-based cron
Add this line to your wp-config.php file:
define('DISABLE_WP_CRON', true);
This stops WordPress from trying to trigger cron on every page load, since you’ll be replacing it with a real server-side trigger.
Part B: Create the actual server cron job
Most hosting control panels (cPanel, Plesk, or your host’s custom dashboard) have a “Cron Jobs” section. Inside it:
- Set the schedule — every 5 or 15 minutes is standard (
*/15 * * * *in cron syntax for every 15 minutes) - Set the command to call your site’s
wp-cron.phpfile directly, typically something like:
wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
(The exact syntax can vary slightly by host if wget isn’t available, curl works as an alternative, and your host’s documentation or support team can confirm the exact command format they expect.)
- Save the cron job
Part C: Verify it’s working
Schedule a test post a few minutes out, then wait and check if it publishes without you visiting the site in between. If it publishes on schedule with no visits, the real cron job is working correctly.
Comparison: WP-Cron vs Real Server Cron
| WP-Cron (Default) | Real Server Cron | |
|---|---|---|
| Trigger | Site visitor traffic | Fixed server schedule |
| Reliability on low-traffic sites | Poor | Excellent |
| Setup required | None (default) | Requires hosting panel access |
| Affected by caching | Yes | No |
Frequently Asked Questions of WordPress scheduled posts not publishing
Do I need a developer to set up a real cron job? Most hosting control panels make this straightforward through their Cron Jobs interface, but if you’re not comfortable with server-level settings, a developer can set this up in a few minutes.
Will disabling WP-Cron break anything else on my site? No, as long as you replace it with a real server cron job, many other WordPress background tasks (like plugin update checks) also rely on this same system, so replacing it with a reliable trigger actually improves overall site reliability, not just scheduled posts.
Why does this happen more on high-traffic sites sometimes too? Ironically, very high-traffic sites can face the opposite problem: WP-Cron firing on every single page load creates unnecessary server load. A real cron job with a controlled interval fixes this too, in the opposite direction.
Is there a way to check if WP-Cron is even running on my site? Yes several free plugins can display your site’s scheduled cron events and their status, which helps confirm whether WP-Cron is firing at all before you go through the server cron setup.
Final Thoughts for wordpress scheduled posts not publishing
WordPress scheduled posts not publishing almost always comes down to WP-Cron’s dependency on site traffic; timezone and caching issues are worth ruling out first, but setting up a real server cron job is the fix that actually solves the problem permanently rather than working around it. If you’d rather have this set up correctly the first time, get in touch here and I’ll configure it for you directly.
This post contains affiliate links. See our [Affiliate Disclosure] for details.
Recommended Tools & Plugins
Every tool below is something I actually use on client projects, not a random affiliate list.
- Hosting: Cloudways fast, managed WordPress hosting
- Domain: Namecheap reliable registrar with free WHOIS privacy
- Theme: GeneratePress lightweight, built for speed
- Page Builder: Elementor Pro the builder behind most of my client sites
- Forms: WPForms reliable, beginner-friendly form builder
- Directory/Listing Sites: Directorist for business directory or listing projects
- Elementor Add-ons: Crocoblock (JetEngine) for dynamic, database-driven sites
- Keyword Research: Mangools is the SEO tool I use for keyword research
- Backups: UpdraftPlus never launch a site without a backup plan
- Course Platform: Tutor LMS is the LMS plugin