WordPress

WP-Cron

WP-Cron schedules WordPress background jobs. By default it runs on page visits, which fails on quiet sites and can pile up on busy ones.

Growth and marketing work

Why it shows up in your week

A campaign page was set to go live Saturday at 08:00. Nobody visited the site overnight. Monday morning the page is still draft. That is default WP-Cron behaviour, not a mysterious CMS bug.

In plain language

Scheduled publishing, some backup plugins, licence checks, and other deferred tasks depend on WP-Cron firing.

On quiet sites, no visit means no job run. On busy sites, every visit may try to spawn work and cause contention.

A common hardening step is DISABLE_WP_CRON in wp-config.php plus a system cron (or host scheduler) calling wp-cron.php on a fixed interval, often every five minutes.

Heavy plugins that schedule frequent jobs need review. Cron is not a free background worker for unlimited tasks.

After a migration, verify cron still runs. New hosts often leave default visit-triggered behaviour in place.

Facts worth keeping

Default trigger
Page visit (not a real wall-clock daemon)
Common harden
DISABLE_WP_CRON + system cron to wp-cron.php
Typical interval
Every 5 minutes on many production setups
Jobs include
Scheduled posts, update checks, many plugin tasks
Failure mode
Missed schedules on low traffic; overlap on high traffic

Not the same as

  • Linux/system cronA real OS scheduler. Production WordPress often uses system cron to call WP-Cron reliably.
  • Action Scheduler (WooCommerce)A more robust queue used by WooCommerce and some plugins. It still needs a reliable trigger underneath.
  • A forever background workerWP-Cron is best-effort deferred work inside WordPress requests or cron hits, not a dedicated job cluster.

Where it bites

WP-Cron hurts when a "scheduled" campaign page never goes live over a weekend, or when a backup plugin never finishes because visits never triggered the queue.

Teams waste hours debugging content while the scheduler was simply never called.

What to check

  • Is default visit-triggered WP-Cron still enabled in production?
  • Does a real cron hit wp-cron.php on a fixed interval?
  • Which plugins schedule heavy recurring jobs?
  • After the last host migration, did anyone verify scheduled posts still publish?
  • Are failed jobs visible in logs or a cron UI plugin you trust?

Common questions

What is WP-Cron?

WordPress's internal scheduler for deferred tasks such as scheduled posts, update checks, and plugin background jobs.

Why do scheduled posts sometimes not publish?

Default WP-Cron runs when the site receives a visit. On low-traffic sites, no visit means the job waits until someone loads a page.

How do you fix WP-Cron in production?

Disable default visit-triggered cron and call wp-cron.php from a real system cron or host scheduler on a fixed interval.

Is WP-Cron a security risk?

Exposing wp-cron.php without rate controls can be abused for resource exhaustion. Follow host guidance and keep WordPress updated.

What should you check first?

Confirm whether production uses visit-triggered cron or a real system cron, then review which plugins schedule recurring heavy work.

Start here

Ready to talk.Book a short diagnostic.

Tell us what needs fixing

A process, a tool, a decision that's stuck. One sentence is fine.

By submitting you agree to our privacy policy.

We read every brief and reply within one business day.

Prefer to talk first?or request a tech stack audit or email us directly

Not sure where to start? Send the stuck decision, workflow, or page. We will say whether you need a diagnostic call, a tech stack audit, or a different first step.