WooCommerce Subscription Stuck On Hold? Causes & Fix
An On-hold subscription is not a subscription that's about to recover. It's one that has stopped, quietly, and will stay stopped forever unless someone acts. Meanwhile the customer's role has been downgraded and their access is gone. Here's why, and how to restart it.
Last updated: 16 Jul 2026 · ~6 min read
The most common cause is that the failed-payment retries ran out. After the last retry, the renewal order goes Failed and the subscription drops to On-hold — and then nothing happens. Ever. Subscriptions applies the inactive subscriber role, Memberships revokes access, and there is no further automatic attempt. Recovery is manual: the customer pays the failed renewal order, which reactivates the subscription.
What On-hold actually means
On-hold is WooCommerce Subscriptions' way of saying "paused, pending money". It's used both deliberately (an admin or customer suspends it) and defensively (a renewal failed). The trap is that the defensive case has no exit. Once the retry rules are exhausted, nothing in the system will try that card again — the subscription simply waits, indefinitely, for a human.
You see a subscription that isn't cancelled, so it doesn't show up as churn. The customer sees their access disappear — the inactive subscriber role gets applied, and if you run Memberships the linked membership is paused with it. From their side that's indistinguishable from you cutting them off, which is why On-hold subscriptions turn into support tickets and refund requests rather than recoveries.
The most common causes (most likely first)
- The retries ran out and nothing tries againThere's a chain of failed renewal attempts ending in a Failed renewal order, then silence. The default retry rules make a handful of attempts over roughly a week; after the last one the subscription sits On-hold with no scheduled retry left. Check the subscription's related orders and its scheduled actions — nothing is queued. The #1 cause.
- Automatic retries are switched off entirelyOne failed renewal order and the subscription is On-hold immediately — no retry chain at all. Check the failed payment retry setting under
WooCommerce → Settings → Subscriptions. With retries off, a single soft decline ends the subscription's life. - The retries are scheduled but the queue isn't running
WooCommerce → Status → Scheduled Actionsshows a retry action still Pending with a date in the past. The retry never fired because Action Scheduler isn't running — the subscription isn't out of chances, it's just waiting on a dead queue. - The decline is permanent, so no retry could ever workEvery attempt returns the same hard decline at the gateway — expired card, lost or stolen card, account closed. Retrying a dead card just burns the retry chain. This one needs the customer to enter a new card; nothing on your side will fix it.
- The subscription has no usable payment methodThe renewal order is sitting on Pending payment rather than Failed, and the subscription's payment method is blank or shows manual renewal. Nothing was ever charged — the renewal is just waiting for the customer to pay it.
- Someone put it on hold deliberatelyNo failed renewal order anywhere in the subscription's history, and an order note recording a suspension by an admin or by the customer through
My Account. Working as intended — it just needs reactivating.
Where to look first
- Open the subscription and read its related orders. A trail of failed attempts ending in a Failed renewal order = the retries ran out (cause 1). No failed order at all = someone suspended it (cause 6).
- Check
WooCommerce → Status → Scheduled Actionsfor a pending retry action for this subscription. Pending with a past date means the queue is dead (cause 3) — fix that and the retry may still succeed on its own. - Look the last attempt up at the gateway and read the decline reason. A soft decline (insufficient funds) can be retried; a hard one (expired, lost, closed) cannot — that's cause 4 and only the customer can fix it.
- Check the subscription's payment method. Blank, or a renewal order on Pending payment rather than Failed, means nothing was charged at all (cause 5).
- Recover by taking the money, not by flipping the status. Send the customer the failed renewal order's payment link (Order actions → email the invoice). When they pay it, the subscription reactivates itself — and the role and membership come back with it.
How long has that subscription been on hold?
On-hold subscriptions don't alert you, don't count as cancellations, and don't appear in a churn report — they just stop paying. DiagnosticIQ's free dashboard surfaces every subscription sitting On-hold, tells you which of them ran out of retries versus which are stuck behind a stalled queue or a missing card, and flags new ones as they drop — while the customer still remembers subscribing.
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
The subscription flips back to Active on its own once the renewal order is paid, the next payment date moves into the future, and the customer's role returns to the active subscriber role (with their membership unpaused, if you run Memberships).
Frequently asked
Can I just set the subscription back to Active?
You can, and you shouldn't — it doesn't take the money. You'd have an Active subscription with an unpaid renewal order and a card that still doesn't work, and you'd find out again next cycle. Get the failed renewal paid instead; the status looks after itself.
Will the customer be charged twice if I retry?
Only if the earlier attempt actually succeeded and was recorded as failed. Check the gateway for a successful charge before retrying anything — if one is there, the renewal needs marking paid, not charging again.
Why did their access disappear?
A non-active subscription applies the inactive subscriber role from WooCommerce -> Settings -> Subscriptions, and WooCommerce Memberships pauses any linked membership. Both come back automatically when the subscription goes Active again.
Will it cancel itself eventually?
No. That's the problem. It stays On-hold indefinitely — no retries, no cancellation, no notification. It'll sit there for a year if you let it.