Introduction

WordPress uses WP-Cron for scheduled posts, plugin maintenance, cleanup, and other background tasks. On a live site, those jobs can stop running if loopback requests fail, WP-Cron is disabled without a real cron replacement, or caching and security layers interfere with the trigger path. The fix is to determine how scheduled tasks are supposed to run in this environment and why that trigger is failing.

Symptoms

  • Scheduled posts miss their publish time
  • Cleanup, backup, or plugin jobs do not run unless triggered manually
  • Site Health reports problems with scheduled events or loopback requests
  • The issue started after hosting changes, performance tuning, or security hardening
  • Some scheduled tasks run late or only when an admin visits the site

Common Causes

  • DISABLE_WP_CRON is enabled without a real system cron job replacing it
  • Loopback requests to wp-cron.php fail because of auth, DNS, or firewall issues
  • Caching, bot protection, or security rules interfere with cron trigger requests
  • The site has too little traffic for request-driven WP-Cron to run reliably
  • The server cron job exists but calls the wrong URL, path, or PHP binary

Step-by-Step Fix

  1. Check whether WordPress is expected to run cron on normal page requests or through a real server-side cron job.
  2. Review the site's configuration for DISABLE_WP_CRON and confirm it matches the intended scheduling model.
  3. Test whether wp-cron.php or the equivalent CLI path can run successfully from the server environment.
  4. Inspect loopback behavior, local DNS resolution, and any firewall or security control that may block self-requests.
  5. Verify that caching, CDN, or WAF rules are not interfering with cron trigger requests.
  6. If the site uses a system cron, confirm it runs at the expected interval and targets the correct path or command.
  7. Re-check WordPress scheduled events after fixing the trigger path and make sure overdue tasks begin clearing normally.
  8. Test the specific workflows that were failing, such as scheduled publishing, backups, or cleanup jobs.
  9. Keep cron ownership explicit in production so WP-Cron is not disabled without a reliable replacement.