WordPress 5 min read

WooCommerce order stuck on Processing after payment: what I check

Customer paid, but the WooCommerce order will not leave Processing. Here is the checklist I run: gateway status, holds, webhooks, stock, automation plugins, and Action Scheduler.

WooCommerce order stuck on Processing after payment: what I check

Payment cleared on Stripe, PayPal, or the bank side. The customer got a charge. In WooCommerce the order sits on Processing and nothing moves: no packing slip, no Completed jump, no fulfilment email that should have fired. That is a different panic from "emails not sending". The money is real. The workflow is stuck.

I treat stuck Processing orders as a status and webhook problem first, not a theme problem. Below is the order I work through on live shops before I start disabling plugins on production.

Match the gateway record to the Woo order

Open the order in Woo and open the matching payment in the gateway dashboard. Confirm the charge succeeded, the amount matches, and the currency matches. Note the transaction ID from both sides.

If the gateway shows a successful capture but Woo still thinks the order is unpaid or On hold, the return URL or webhook never finished. If Woo says Processing but the gateway shows Pending or Requires action (3D Secure), the customer may still be mid-auth while you are staring at a half-written order.

I copy the transaction ID into order notes so the next person (or me tomorrow) is not guessing which payment belongs to which order.

Check intentional holds and stock locks

Woo and many gateways put paid orders on On hold or leave them on Processing when something else is waiting. Common causes:

  • Manual review or fraud filters on the payment plugin
  • BACS or cheque methods that never auto-complete
  • "Hold stock" settings and unpaid cart timers fighting a paid order
  • Pre-order, backorder, or membership plugins waiting on a second step

In WooCommerce → Settings → Products → Inventory, check how long unpaid orders reserve stock. A mis-set hold can leave weird stock numbers even after payment, which then blocks fulfilment plugins that refuse to ship when stock looks wrong.

Webhooks and IPN callbacks

Modern gateways (Stripe, PayPal, Square) push status changes over webhooks. If the webhook secret is wrong, the endpoint 404s, or the host blocks the provider IP range, Woo never gets the "payment completed" ping and never advances the order the way you expect.

In the gateway dashboard, open recent webhook or IPN deliveries for that payment. Look for failed deliveries, 500 responses, or retries still pending. In Woo, check the payment plugin's own log (Stripe for WooCommerce, PayPal Payments, etc.) around the order timestamp.

A clean charge with zero successful webhooks is almost always config or hosting, not "Woo is broken".

Automation and custom status plugins

Order status managers, fulfilment apps, and "auto-complete virtual orders" plugins love to own the Processing → Completed path. After an update they can stop matching conditions: wrong product category, missing shipping method, or a custom status name that core never hears.

I open the order notes timeline. If a plugin wrote "status changed to X" and then nothing, that plugin's rule failed silently. If notes stop right after payment, the automation never ran. Disable the automation on staging first, place a test paid order, and see whether Processing behaves again.

Action Scheduler and failed jobs

Woo queues a lot of post-payment work in Action Scheduler. Failed or stuck actions mean stock adjustments, emails, and third-party sync never finish even though the order looks Processing in the list.

In WooCommerce → Status → Scheduled Actions, filter for failed or pending items tied to that order ID or to payment and order hooks around the purchase time. Retry only after you fix the underlying error (bad API key, dead webhook, conflicting plugin). Then place a fresh test order rather than assuming an old queue item will recover cleanly.

Theme or plugin conflict after an update

Checkout and thank-you hooks break after plugin updates more often than the admin order screen does. A custom thank-you template, an abandoned-cart plugin, or an old code snippet on woocommerce_payment_complete can leave the order paid in the gateway and half-finished in Woo.

On staging:

  1. Switch to a default theme briefly
  2. Keep Woo and the payment plugin only
  3. Run a real or test-mode paid order
  4. Re-enable plugins in small batches until Processing sticks again

If Processing completes normally with a default stack, the conflict is in custom code or a fulfilment add-on, not in Woo core.

When to stop guessing

If the gateway charge is clean, webhooks are green, stock holds look sensible, Action Scheduler is clear, and automation rules are disabled on staging with the same stuck behaviour, stop shotgun-changing live orders. At that point you want logs, a staging clone with the same payment mode, and someone who has seen gateway race conditions and custom status stacks before.

Need this sorted properly? If paid orders are still stuck on Processing after the checklist, I dig into gateways, webhooks, and order status automation on live Woo stores.

WordPress & WooCommerce support →

Most stuck Processing orders come down to a webhook that never landed, a hold or automation rule that never fired, or a plugin fighting the payment-complete hook. Match the gateway to Woo first, then queue and automation. Cheers, and get that order moving.

Need a hand with this?

Get help with a broken order journey, custom store features or ongoing WooCommerce care.

A related project

A custom price history feature for WooCommerce

Bespoke plugin work to record product price changes and present the history by date, delivered through an agency.

Talk directly to Adam

Share this article

Back to Blog