WooCommerce Order Status Not Updating After Payment? Causes & Fix
The customer paid, the money is in the gateway, and the order status hasn't budged. A status change isn't automatic — it's code that has to be triggered and then has to run. Here's what stops it, and how to tell which one is yours.
Last updated: 16 Jul 2026 · ~7 min read
The usual cause is that the gateway's callback never lands, so the transition code never runs at all. Stripe calls it a webhook, PayPal an IPN — either way, no callback means no status change. Open your gateway's delivery log and look for a failed or missing delivery against that order. If it did arrive, something ran, or was queued, and never finished.
Why a status doesn't move on its own
WooCommerce doesn't poll your gateway. It waits to be told. When payment clears, the gateway sends a callback to your store, WooCommerce matches it to the order, and then runs the transition to Processing. Three separate things — arrive, match, run — and a break in any of them leaves the status exactly where it was, with no error anywhere in the admin. This page is about that transition mechanism, whatever status you're stuck on.
If your orders are stuck specifically on Pending payment and you're not yet sure the customer even paid, that page is a better fit — it starts by working out whether money moved at all. Come back here when you know the payment succeeded and the status still won't follow, or when the status that won't move isn't Pending.
The most common causes (most likely first)
- The gateway callback never reaches your storeThe gateway dashboard shows a successful charge, and its webhook or IPN log shows a failed delivery, a retry, or no attempt at all against that order. The transition code was never triggered, so there's nothing in the WooCommerce logs either — the silence on your side is the signal. Gateway-specific fixes: Stripe webhooks, PayPal IPN.
- The transition is queued and the queue is stalledThe callback arrived fine and the order has a note about the payment, but the status still hasn't changed. Open
WooCommerce → Status → Scheduled Actions— a long list of pending actions with past-due dates means WP-Cron isn't firing and the queued work is simply sitting there. See scheduled actions stuck pending. - A plugin hooks the transition and blocks or overrides itThe status moves and then moves back, or jumps to something unexpected. Order-status automation, auto-complete, fulfilment and custom-status plugins all hook the payment-complete transition, and one throwing or forcing its own status wins. The order notes tell the story — read them top to bottom, they're timestamped.
- The status did change and you're looking at a cached viewThe order notes show the transition happened, but the list or the customer's My account page shows the old status. Object caching serving a stale order, or an admin list not reflecting the current data store after an HPOS migration. Hard-refresh and open the order itself — if the single order is right and the list is wrong, the data is fine and the display isn't. Related: orders missing after HPOS.
- Nothing is broken — that status is where it's meant to stopCheck this before you fix anything. Paid orders for physical goods are supposed to stop at Processing and wait for you to mark them Complete; only virtual and downloadable orders auto-complete. Bank transfer and cheque orders are meant to stay Pending until you confirm receipt. Working as designed, and worth ruling out first.
Where to look first
- Decide whether the status is actually wrong. Processing on a physical-goods order isn't stuck — it's waiting for you. Pending on a bank transfer isn't stuck either. Rule out cause 5 before touching anything.
- Read the order notes. They're timestamped and they show what ran. A note recording the payment means the callback landed — go to causes 2 to 4. No such note means it never arrived — cause 1.
- No payment note? Check the gateway's delivery log. Find the callback for that order in Stripe, PayPal or whichever gateway. A failed delivery or no attempt is your answer, and each gateway has its own fix.
- Callback landed but the status is unchanged? Open
WooCommerce → Status → Scheduled Actions. A pile of pending actions with past-due dates means the queue is stalled and the transition is stuck in it (cause 2). - Status flipping or reverting? Suspect another plugin. Deactivate order-status automation, auto-complete and fulfilment plugins, then place a test order and watch the notes.
How many orders is this already sitting on?
The single order you're looking at is rarely the only one. A stalled transition affects every order that came through the same path, so by the time one customer emails you there's usually a quiet backlog behind it — paid, unfulfilled, and invisible because a stuck status looks exactly like a normal one in the list. DiagnosticIQ's free dashboard finds them: it watches the transition path, surfaces orders that were paid but never moved, and the AI names the break — down to "gateway callback delivered, transition stuck in a stalled action queue" — in about 30 seconds.
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
Place a test order — it should move to Processing on its own within seconds, with an order note recording the payment, a successful delivery in the gateway's callback log, and no past-due backlog under WooCommerce → Status → Scheduled Actions.
Frequently asked
Was the customer charged?
Check the gateway dashboard, not WooCommerce. With this problem the charge has usually gone through perfectly — only your store's record of it is behind.
Can I just change the status by hand?
Yes, and it won't re-charge anyone. But it's a patch on one order — if the callback path is broken, the next order will do the same thing.
Why does Processing never become Complete?
Because it isn't supposed to on its own for physical goods. Only virtual and downloadable orders auto-complete. Everything else waits for you to mark it Complete.
Will fixing this update the orders already stuck?
Not retroactively for the ones whose callbacks already failed. Resend those from the gateway where you can, and mark the rest paid by hand after confirming the funds.