WordPress cron jobs stop running because WP-Cron is not a real server scheduler. WP-Cron, the built-in WordPress system for running scheduled tasks, only fires when someone loads a page on your site. That design makes schedules fragile. Low traffic, caching, errors, or a disabled trigger can delay scheduled posts, WooCommerce orders, email sends, backup jobs, and update checks.
Table of Contents
- How WordPress Cron Actually Works
- Why Low Traffic Stops Schedules
- How Plugins, Errors, and Hosts Break Tasks
- How to Make Schedules Run Reliably
- Frequently Asked Questions
How WordPress Cron Actually Works
WP-Cron checks for due tasks on each page load. When a visit happens, WordPress compares the current time against its schedule and runs anything overdue. This keeps basic scheduling simple for shared hosting.
No server access is needed to publish a future post or check for updates. The trade-off is timing. Tasks run late, early, or not at all if visits are irregular, because nothing wakes the site between visits.
Why Low Traffic Stops Schedules
Quiet sites miss schedules first. A brochure site with ten visits per day may have hours with no trigger, so an hourly import or daily backup waits for the next visitor. High-traffic patterns can also fail.
If most visits hit cached pages, PHP may never load and WP-Cron may never fire. Full-page cache and static hosting often bypass it by design. Time settings add another trap. A wrong timezone, a changed site URL, or a long maintenance window can leave tasks marked as overdue but never reached.
How Plugins, Errors, and Hosts Break Tasks
A single failure can block the queue. A plugin that throws a fatal error during its scheduled hook, exhausts memory, or times out can stop later tasks in the same request. Conflicts are common after updates.
Two plugins scheduling the same hook, a security plugin blocking loopback requests, or a disabled WP-Cron constant can silence tasks without a clear warning. Hosts may limit the same behavior. Some throttle frequent PHP requests, block WordPress from calling itself, or kill long jobs before they finish.
- Scheduled post stays stuck on "missed schedule"
- Emails, abandoned-cart messages, or membership renewals arrive late
- Backups, imports, or feed syncs show gaps in their logs
How to Make Schedules Run Reliably
Replace visit-based triggers with a real server cron for important tasks. Most hosts let you call `wp-cron.php` every five to fifteen minutes, which runs schedules on time even with no visitors. Keep the setup simple and observable.
Disable built-in triggering only after the server job works, then check scheduled actions with a cron-viewer plugin during the first week. Test one full cycle before trusting it. Schedule a test post, place a test order, or force a backup and confirm each completes at the expected time.
- Create one server cron job that loads wp-cron.php on a fixed interval
- Start with every 10 minutes, then tighten only if tasks need it
- Log runs so missed posts, failed payments, or stalled backups stand out
Frequently Asked Questions
Will more traffic fix WP-Cron?
It helps timing but does not make it reliable. Cached visits may skip PHP, and errors can still block tasks.
Should I disable WP-Cron on every site?
No. Keep it for small, low-risk sites. Use a server cron when timing matters for sales, email, or backups.
Why does my scheduled post say "missed schedule"?
That usually means no trigger ran at the due time. A server cron, correct timezone, and working loopback requests prevent most cases.




