WordPress Cron Jobs: Why They Are Unreliable and How to Fix Them

WordPress has a built-in task scheduler called WP-Cron. Unlike real system cron jobs, WP-Cron only fires when someone visits your site. On a low-traffic site, your “hourly” task might not run for days.
How WP-Cron Actually Works
Every page load, WordPress checks if any scheduled tasks are overdue. If they are, it fires an async request to wp-cron.php to process them. This means:
- No traffic = no cron execution
- High traffic = unnecessary checks on every request
- The visitor who triggers cron gets a slightly slower page load
The Fix: Real System Cron
Disable WP-Cron and use a real cron job instead:
// In wp-config.php
define("DISABLE_WP_CRON", true);
Then add a system cron job that hits wp-cron.php on a schedule:
# Run WordPress cron every 5 minutes
*/5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
Or better yet, use WP-CLI:
*/5 * * * * cd /var/www/html && wp cron event run --due-now > /dev/null 2>&1
When This Matters
If your site relies on scheduled tasks — publishing scheduled posts, sending email digests, clearing transient caches, or processing WooCommerce orders — WP-Cron is a ticking time bomb. Switch to real cron and your scheduled tasks will actually run when they are supposed to.
Written by
Adrian Saycon
A developer with a passion for emerging technologies, Adrian Saycon focuses on transforming the latest tech trends into great, functional products.


