Blog · WordPress
WordPress cron, scheduled tasks and wp-cron fixes
wp-cron isn't really cron, it's a hook that fires on visitor traffic. These posts cover why scheduled WordPress work goes late and how to put a real clock behind it.
About this topic
WordPress
If a scheduled post went live four hours late, a WooCommerce renewal email landed Tuesday instead of Monday, or a daily backup quietly skipped a day, the prime suspect is the same: wp-cron. WordPress's built-in scheduler is a hook in wp-cron.php that fires when a page request happens to land within sixty seconds of when the task was due. That works on a high-traffic blog. It misses everywhere else, and managed hosts (Kinsta, WP Engine) plus shared hosts (Bluehost, SiteGround) usually lock you out of real crontab so you can't even paper over it locally.
The fix is small. Set DISABLE_WP_CRON in wp-config.php, point Crontap at /wp-cron.php every 5 minutes (or every 1 minute on Pro), with a per-site IANA timezone so the 5am Monday digest fires at 5am Monday in Europe/London and not whenever the first staff member opens the admin tab. Failure alerts to Slack, Discord, Telegram, email or a webhook land the moment wp-cron.php returns a 500. The posts below cover wp-cron, WooCommerce Action Scheduler, and the variants for hobbyist sites versus high-volume stores.
Blog on WordPress
2 items- Guides
Why your WordPress scheduled tasks are missing (and how to fix wp-cron)
wp-cron only fires on visitor traffic, which is why your 5am Monday digest lands at 8:14am. Here is the documented fix: disable wp-cron, point Crontap at wp-cron.php on a real clock, and get scheduled posts and WooCommerce renewals firing on time.
- Guides
WooCommerce cron not running: the traffic problem and the fix
Renewal emails late, coupon expirations stuck past midnight, Action Scheduler past-due climbing? WooCommerce cron problems are wp-cron problems. Here is the 5-minute fix that puts Action Scheduler on a real clock.
Related on Crontap
The same WordPress topic, from other angles.
FAQ
Common questions on WordPress
- Does Crontap replace wp-cron entirely?
- It replaces the trigger, not the queue. Set define('DISABLE_WP_CRON', true) in wp-config.php to stop WordPress from firing wp-cron on page loads, then point Crontap at https://yoursite.com/wp-cron.php?doing_wp_cron=1. WordPress's event queue still runs the same way; only the visitor-tied tick is gone.
- What cadence is sensible for a WordPress site?
- Every 5 minutes is the safe default. For real-time imports, polling tasks, or per-minute WooCommerce work, drop to every 1 minute on Crontap Pro. Hourly is fine for content-only sites where you just need scheduled posts to publish on time.
- Will this conflict with the host's built-in cron?
- No. wp-cron events are idempotent, so if both Crontap and the host hit wp-cron.php in the same window, whichever lands first drains the queue and the other request finds it empty. There is no double-firing.
- I'm on managed WordPress with a 15-minute floor. Can I get tighter cadence?
- Yes. The 15-minute floor is the host's own crontab limit. An external HTTP scheduler doesn't care about that. Crontap can hit wp-cron.php as often as 1 minute on Pro, regardless of what the host's internal cron is doing.
More from Crontap
Topics across the site.
Every topic Crontap covers, in one row. Each one has its own page on the blog surface.
Ready to fix it?
Point Crontap at any URL. Pick any cron. Done.
WordPress, Shopify, Railway, Cloud Run, Vercel, HubSpot, Ghost, your own box. If it answers HTTP, Crontap can drive it on a clock you can read, in the timezone that actually matters, and page you when something breaks.
Free forever tier ・ No credit card required
/wp-cron.php?doing_wp_cron=1
Schedule
"every 5 minutes"
Next
in 23s