Skip to content

WordPress Cron Jobs Explained: How Scheduled Tasks Actually Work

Key Takeaways

  • WP-Cron only checks due tasks when a page loads, so scheduled posts can publish late on low-traffic sites.
  • WP Crontrol lists every scheduled hook, shows when it is next due, and lets a user run one manually to test it.
  • DISABLE_WP_CRON set to true in wp-config.php stops WordPress's page-load cron, and a real system cron then calls wp-cron.php on a fixed schedule, commonly every 5 to 15 minutes.
  • WP-Cron covers scheduled posts, WordPress core, plugin, and theme updates, plugin tasks like cache clearing and database cleanup, SEO plugin sitemap regeneration, and WooCommerce order-related scheduled actions.

“WP-Cron isn’t a real cron job” is one of those facts that gets repeated in WordPress circles without much explanation of what it actually means in practice. It matters more than it sounds: it’s the reason scheduled posts sometimes publish late, and the reason a low-traffic site can have scheduled tasks that silently stop firing.

Table of Contents

WP-Cron Is a Pseudo-Cron, Not a Real System Cron

A real system cron job runs on a fixed schedule regardless of anything else happening on the server. WordPress’s built-in wp-cron.php doesn’t work that way: it only checks for and runs due scheduled tasks when a page on your site loads and triggers it. On a busy site with steady traffic, that’s frequent enough to feel invisible. On a low-traffic site, it means scheduled tasks (a scheduled post publishing, a plugin’s daily cleanup routine) can sit overdue until the next visitor happens to load a page.

Flow diagram showing the default page-load-triggered WP-Cron versus a fixed real system cron
Default WP-Cron waits for a page load; a real system cron fixes the traffic dependency entirely.

What Actually Uses WP-Cron

  • Publishing scheduled posts at their set time
  • Checking for WordPress core, plugin, and theme updates
  • Plugin-scheduled tasks: cache clearing, sending queued emails, database cleanup, SEO plugin sitemap regeneration
  • WooCommerce order-related scheduled actions, if you run a store

How to Check If It’s Actually Firing

The most direct way is a dedicated cron-inspection plugin (WP Crontrol is the commonly used, free option) that lists every scheduled hook, when it’s next due, and lets you run one manually to test it. If scheduled posts are consistently publishing late or a plugin’s scheduled task never seems to run, this is the first thing to check before assuming the plugin itself is broken.

WP Crontrol plugin page on WordPress.org, a tool for inspecting and debugging WP-Cron
WP Crontrol, a free tool for inspecting scheduled WP-Cron events. Screenshot captured live, 2026-09-06.

The Fix: A Real System Cron Calling wp-cron.php

The standard fix for the traffic-dependency problem is two steps:

  1. Disable WordPress’s own page-load-triggered cron by adding define('DISABLE_WP_CRON', true); to wp-config.php.
  2. Set up a real system cron job (through your host’s control panel, or a server-level crontab entry) that calls wp-cron.php directly on a fixed schedule, commonly every 5–15 minutes.

A typical crontab entry, running every 15 minutes:

*/15 * * * * wget -q -O - https://yoursite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

This decouples scheduled tasks from site traffic entirely, so a quiet site still runs its scheduled jobs reliably. If your host doesn’t give you crontab or control-panel cron access (common on some managed and shared hosts), a third-party pinger service that hits the same wp-cron.php?doing_wp_cron URL on a schedule accomplishes the same thing from outside the server.

A Caveat: Don’t Disable WP-Cron Without Replacing It

Setting DISABLE_WP_CRON to true without also setting up the replacement system cron leaves every scheduled task unfired indefinitely — no scheduled posts publish, no plugin cleanup jobs run, nothing. This is a real, easy-to-make mistake: disabling the constant is only step one. Verify the system cron is actually reaching wp-cron.php (check your host’s cron job logs, or a cron-inspection plugin’s “next due” times actually updating) before considering the fix complete.

FAQ

Why did my scheduled post publish late?

WP-Cron only fires on a page load. If your site had no visitors right at the scheduled time, the post waits until the next page load triggers the check, which can be minutes or hours later on a low-traffic site.

Is disabling WP-Cron and using a real system cron safe?

Yes, it’s the standard, widely-documented fix for the traffic-dependency issue, and generally makes scheduling more reliable, not less — provided you actually set up and verify the replacement system cron rather than just disabling the constant on its own.

Do I need a plugin to set up a real system cron?

No, the system cron itself is set up at the server/hosting level (control panel or crontab), not through a WordPress plugin. A plugin like WP Crontrol is useful for inspecting and debugging, not for creating the underlying system cron entry.

What happens if I disable WP-Cron but forget to set up the system cron replacement?

Every scheduled task stops firing entirely — no scheduled posts publish, no plugin maintenance jobs run. Always verify the replacement system cron is actually hitting wp-cron.php before considering the fix complete.

Conclusion

WP-Cron’s traffic-dependency quirk is invisible on a busy site and a real problem on a quiet one — if you’ve ever wondered why a scheduled post landed late, this is almost always the reason. A real system cron calling wp-cron.php on a fixed schedule is a five-minute server-side fix that removes the dependency entirely, as long as you verify it’s actually firing afterward.

Suggested Reading

Stay updated with Helpful WordPress Tips, Insider Insights, and Exclusive Updates – Subscribe now to keep up with Everything Happening on WordPress!

Have Feedback or Questions?

Join our WordPress Community on Facebook!

About the Author

Photo of Aditya Sharma CMO of Nexter
CMO at POSIMYTH Innovations · Nexter · 7 years experience

He has spent years in the WordPress ecosystem building, breaking, and optimizing sites until they actually perform. He works at the intersection of speed, growth, and usability, helping creators ship websites that load fast and convert. An active WordPress community contributor sharing through tools, tutorials, and direct collaboration. Tested practice, not theory.

WordPressThemesElementorn8nAIClaudeAutomationServer

Related Blogs