WordPress

How to Fix Missed Scheduled Events in WordPress with Real Cron

· Updated Apr 6, 2025 · 4 min read

Ever wonder why your WooCommerce subscriptions don’t renew, emails don’t send, or scheduled actions sit in “pending” forever? The culprit is often hiding in plain sight: wp-cron.

WP Cron runs background tasks like scheduled sales, renewals, and cleanup jobs. But by default, it only runs when someone visits your site, which means low-traffic or heavily cached sites can silently fail to trigger critical actions.

Let’s dig into what wp-cron is, why it can break, and how using real cron or ALTERNATE_WP_CRON can make your store run smoother and more reliably.

What is WP Cron?

WP Cron is WordPress’s internal system for scheduling tasks - things like:

Unlike system cron (used by most servers), wp-cron only runs when someone visits your site. If no one visits? Nothing happens. That’s where the problem starts.

Why WP Cron Sometimes Fails

The default setup has a few issues:

Symptoms you might see:

Solution 1: Use ALTERNATE_WP_CRON

This WordPress built-in fallback tweaks how cron jobs run. Instead of firing an internal HTTP request, it redirects the current page to run wp-cron.php directly.

How to Enable

In your wp-config.php, add:

define('ALTERNATE_WP_CRON', true);

This is perfect for sites without server access or where DISABLE_WP_CRON + real cron isn’t an option. It’s lightweight and often solves missed cron jobs with minimal setup.

Solution 2: Disable WP Cron and Use Real Server Cron

This is the most reliable method - highly recommended for stores, especially with WooCommerce Subscriptions or heavy background processing.

1. Disable Default Cron

Add to wp-config.php:

define('DISABLE_WP_CRON', true);

2. Add a Real Cron Job

On your server (via SSH or cPanel):

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

Or use WP-CLI:

*/5 * * * * cd /var/www/yourdomain.com && wp cron event run --due-now > /dev/null 2>&1

This tells your server to trigger wp-cron every 5 minutes, no visitors required.

Bonus: WP-Cron vs Action Scheduler (And Why It Matters)

WooCommerce and many of its extensions (like Subscriptions or Bookings) rely on a system called the Action Scheduler - a job queue that sits on top of wp-cron.

If WP Cron doesn’t run, Action Scheduler doesn’t run either.

This is why switching to a real cron is a game-changer: it guarantees reliability and ensures important WooCommerce events don’t silently fail.

When Should You Use Real Cron?

Use system cron (or ALTERNATE_WP_CRON at minimum) when:

Tools That Help

Wrapping Up

WP Cron is great - until it’s not. Relying on page visits to run critical background jobs is risky for any WooCommerce site. By switching to ALTERNATE_WP_CRON or setting up a real cron job, you make your store more reliable, resilient, and ready for scale.

If you’re seeing missed orders, delayed emails, or stuck renewals - this is one of the first fixes we recommend.

Shameem Reza
Written by Shameem Reza

I am a Happiness Engineer at Automattic, helping merchants turn WooCommerce chaos into calm with clear solutions and simple technical breakdowns.

Enjoyed reading this?

This site stays ad-free and independent. If something here saved you time or taught you something new, a coffee goes a long way.

Buy me a coffee ☕
Keep reading