WooCommerce fixes / scheduled actions stuck pending

WooCommerce Scheduled Actions Stuck Pending? Causes & Fix

If WooCommerce → Status → Scheduled Actions shows a growing list of Pending actions with dates in the past, nothing is running your queue. Renewals, emails and stock syncs all stall behind it. Here's how to find out why and drain it.

Last updated: 16 Jul 2026 · ~6 min read

Quick answer

The most common cause is DISABLE_WP_CRON set to true in wp-config.php with no server cron put in its place. Action Scheduler's queue runner is itself a WP-Cron event, so when WP-Cron never fires, the queue never runs and every action sits on Pending forever. Add a real server cron that hits wp-cron.php, or run wp action-scheduler run to drain the backlog now.

What a "pending" scheduled action actually means

Action Scheduler is the background job queue WooCommerce and its extensions use for anything that shouldn't happen during a page load — subscription renewals, webhook deliveries, order emails, analytics imports. Each job is a row with a scheduled date and a status. Pending means the job is due (or overdue) and simply hasn't been picked up yet.

From the store owner's side it looks like a list of stale dates in the Scheduled Actions screen. From the customer's side it looks like nothing at all — no renewal charge, no email, no status change. That's what makes this one dangerous: it is completely silent, and the backlog compounds every day it goes unnoticed.

The most common causes (most likely first)

  1. DISABLE_WP_CRON is true and no server cron replaced itwp-config.php contains define( 'DISABLE_WP_CRON', true ); but there is no matching cron job on the server. Action Scheduler's runner hooks onto the WP-Cron event action_scheduler_run_queue — kill WP-Cron and you kill the runner. By far the #1 cause.
  2. WP-Cron is enabled, but the site gets almost no trafficActions run in bursts — a clump complete right after you log in, then nothing for hours. WP-Cron only fires when someone loads a page, so a quiet store has no heartbeat.
  3. Stale rows in wp_actionscheduler_claims from a crashed runnerActions sit on In-progress rather than Pending, with a start date hours or days old. A PHP fatal or memory limit killed the batch mid-run, so the claim was never released and the cleaner that would release it never ran either.
  4. The backlog is arriving faster than one batch can clear itActions are completing, but the pending count still climbs. The runner processes 25 actions per batch by default and stops at a 30-second time limit — if your store queues more than that per minute, the queue never catches up.
  5. Loopback requests are blockedTools → Site Health reports that the loopback request failed. Action Scheduler's async runner calls the site back over HTTP to start a batch; a firewall, WAF, HTTP auth or a bad local DNS entry blocks it.
  6. The action's own callback fatals every time it runsThe same hook cycles Pending → In-progress → Failed, or the same few actions retry endlessly while everything behind them waits. The queue isn't stuck — one job is poisoning it.

Where to look first

Want to know the queue is stalling before the renewals do?

Reading the Scheduled Actions table by hand tells you there's a backlog — it doesn't tell you why, and it only tells you when you happen to look. DiagnosticIQ's free dashboard checks the WP-Cron constant, the loopback, the claims table and the pending backlog together, and names the reason the queue runner isn't firing. Then it keeps watching, so the next Action Scheduler backlog reaches you before it reaches your subscribers.

Get the free plugin

Made by Prima Digital — the team behind this guide. Free forever; no card to install.

How to know you fixed it

Verify

Reload WooCommerce → Status → Scheduled Actions after a minute — overdue actions should be moving to Complete on their own, and the newest Pending dates should be in the future, not the past.

Frequently asked

Will the stuck actions still run once I fix cron?

Yes. Pending actions aren't discarded — they run as soon as a runner picks them up, oldest first. Expect a burst of catch-up activity, including renewal charges and emails that are days overdue.

Can I just delete the backlog?

Only if you know what's in it. Deleting pending actions cancels real work — unsent emails, uncharged renewals. Fix the runner first, let the queue drain, then clean up what's genuinely stale.

Is it safe to disable WP-Cron?

Yes, and on a busy store it's better — but only if you replace it with a server cron hitting wp-cron.php every minute. Disabling it with nothing behind it is what causes this.

How do I force the queue to run right now?

With WP-CLI: wp action-scheduler run. That drains the due actions immediately and is the fastest way to confirm the queue itself is healthy and only the trigger was missing.

>_
John O'Keane — Founder, Prima Digital · LinkedIn
Contributions by David Zhang · LinkedIn
I build DiagnosticIQ, the WooCommerce diagnostic plugin, and I've lost whole afternoons to Action Scheduler queues that were stalled for one line in wp-config.php.