Introduction
Disabling wp-cron.php is a valid performance optimization only if a real scheduler replaces it. Many sites set DISABLE_WP_CRON in wp-config.php and never create the system cron job, which leads to missed scheduled posts, stale WooCommerce emails, and plugins that appear randomly broken.
Symptoms
- Scheduled posts stay in the future instead of publishing
- WooCommerce follow-up emails or subscription renewals stop running on time
wp cron event listshows overdue events piling up- The issue started after disabling wp-cron for performance tuning
Common Causes
DISABLE_WP_CRONwas enabled without creating a server-side cron job- The system cron runs under a user that cannot execute PHP or access WordPress
- The cron command uses the wrong path to WordPress or PHP
- Basic auth or a firewall blocks the HTTP call to
wp-cron.php
Step-by-Step Fix
- 1.Check whether wp-cron is disabled and events are overdue
- 2.Confirm the configuration problem before changing plugin settings.
wp config get DISABLE_WP_CRON
wp cron event list --due-now- 1.Create a real server cron job
- 2.Use WP-CLI if possible because it is more reliable than hitting
wp-cron.phpover HTTP.
*/5 * * * * /usr/local/bin/wp cron event run --due-now --path=/var/www/html >/dev/null 2>&1- 1.Verify the cron user can execute PHP and access the site files
- 2.Cron commonly fails because the PATH, PHP binary, or WordPress path differs from an interactive shell.
sudo -u www-data /usr/local/bin/wp cron event run --due-now --path=/var/www/html- 1.Re-run overdue jobs and confirm the queue clears
- 2.After the real cron is working, flush the backlog and watch new events trigger on schedule.
wp cron event run --due-now
wp cron event listPrevention
- Never enable
DISABLE_WP_CRONwithout provisioning a server cron in the same change - Prefer WP-CLI cron execution over public HTTP calls to
wp-cron.php - Include scheduled task verification in post-deploy checks
- Monitor overdue cron events on busy WordPress and WooCommerce sites