WooCommerce Orders Stuck On Hold Instead of Processing? Causes & Fix
If new orders land on On-hold rather than Processing, check this today, not this week. The most likely cause puts a clock on your money: Stripe voids an uncaptured card authorisation after about 7 days, and nobody tells you when it goes.
Last updated: 16 Jul 2026 · ~6 min read
The most common cause is that the gateway is in authorize-only mode — it authorises at checkout and waits for you to capture manually, so orders land On-hold. Uncaptured card authorisations are voided automatically after roughly 7 days, and the money is gone with no notice. Capture by moving the order to Processing or Completed, then switch the gateway back to capturing at checkout.
What On-hold actually means on a normal order
On-hold means WooCommerce is holding the order and waiting for something — usually money, sometimes a decision. It's a legitimate state: bank transfer orders live there by design, and so do orders where the gateway has reserved the funds but not taken them. The order is real, the stock is reduced, and the customer has almost certainly seen a pending amount on their card.
Which is exactly the trap. The customer thinks they've paid. Your gateway dashboard shows the money as uncaptured, not received. And if nobody captures it, the authorisation lapses — the pending amount vanishes off the customer's statement, the order is still sitting there looking fine, and you have shipped or owe goods with nothing behind them.
The most common causes (most likely first)
- The gateway is in authorize-only (manual capture) modeThe order note says the charge was authorised and asks you to process the order to take payment, or cancel to release the authorisation. At Stripe the payment shows as Uncaptured. Check the Stripe settings for the option to authorise at checkout and capture later — if that's on, every card order does this. The #1 cause, and the one with the 7-day clock on it.
- It's a manual payment method — On-hold is by designThe order's payment method is bank transfer (BACS) or cheque, and the note says it's awaiting payment. WooCommerce core sets these to On-hold deliberately and waits for you to confirm the money arrived. Nothing to fix — just don't ship yet.
- The payment was flagged for review by the gateway's fraud toolsOnly some orders are affected, and the order note mentions a review or elevated risk. The gateway has taken the payment but held it for a manual decision — the order stays On-hold until the review is resolved in the gateway dashboard.
- A plugin or snippet is forcing the paid status to On-holdOrders go On-hold the moment payment completes, across every gateway, with no authorisation note. Something is filtering
woocommerce_payment_complete_order_statustoon-hold— usually a fraud, fulfilment or order-approval plugin. Confirm by testing with plugins disabled on a staging copy. - Someone or something set it On-hold after the factThe order reached Processing first and moved back. An order note names an admin user or a plugin, and the timestamps show the change happened well after checkout.
Where to look first
- Open the order and read its notes first. A note about an authorisation waiting to be captured is cause 1 and it's urgent — you have about a week from the authorisation date before Stripe voids it.
- Find the payment at the gateway. Uncaptured means the money is reserved but not taken (cause 1). Succeeded means it's already yours and only the order status is wrong. In review is cause 3.
- Check the order's payment method. Bank transfer or cheque? On-hold is correct (cause 2) — confirm the funds landed in your account, then mark it Processing yourself.
- Check whether it's every order or some orders. Every card order = a gateway setting or a filter (cause 1 or 4). Some orders = fraud review (cause 3) or a manual change (cause 5).
- Then capture anything uncaptured today, oldest first. Moving the order to Processing or Completed captures the authorisation. Anything older than seven days may already be dead — check the gateway before you promise the customer anything.
Do you know which of your orders has money about to expire?
The seven-day void is silent at both ends: the order still looks normal in WooCommerce, and the authorisation just stops existing at Stripe. Finding the uncaptured ones means opening each On-hold order and cross-checking it against the gateway by hand. DiagnosticIQ's free dashboard spots authorize-only mode, counts the orders sitting On-hold, and tells you plainly whether the money on them is captured or on a countdown — before the countdown runs out.
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
Move a held order to Processing and the payment should flip from Uncaptured to Succeeded at the gateway, with the capture recorded in the order notes. Once the setting is corrected, new card orders should land on Processing by themselves.
Frequently asked
Was the customer charged?
Not yet, if the payment is uncaptured. The amount is reserved against their card and shows as pending on their statement, but no money has moved. Capturing takes it. Doing nothing releases it.
What happens after 7 days?
Stripe voids an uncaptured card authorisation automatically at around seven days and the reservation disappears. The order stays On-hold looking exactly the same. To get paid after that you have to ask the customer for payment again.
Can I just bulk-change them all to Processing?
That is how you capture them, so on genuine authorize-only orders it's the right move — but check the gateway first. Anything already voided will fail to capture, and anything under fraud review should be resolved at the gateway rather than forced through.
Should I ship an On-hold order?
No. On-hold means the money isn't in your account yet, whether it's an uncaptured authorisation or an unconfirmed bank transfer. Capture or confirm the payment first, let the order move to Processing, then ship.