Start free trial

WooCommerce orders stuck on Pending payment: what it means and how to fix it

Orders stuck on Pending payment in WooCommerce? Learn when it’s normal, when the payment confirmation is blocked, and how to fix paid orders safely.

  • 7 min read
  • 6 steps
  • Updated

Pending payment means WooCommerce created the order but hasn’t been told it was paid. A few of these are normal. Many of them, or ones the customer says they paid, mean something is wrong. Pick what you’re seeing.

What do you see in your orders?

Pick the closest match. We’ll point you to the right steps.

Choose a stage above.

Some orders are pending and no payment came in

  • The customer left at the payment step or closed the tab
  • Their card was declined or they cancelled a security check
  • Usually normal: WooCommerce cancels them by itself

When it’s normal

The customer paid, but the order stays on Pending payment

  • The payment provider’s confirmation (webhook) can’t reach your store
  • A firewall, security plugin or maintenance mode blocks it
  • The site address changed and the provider still uses the old one

Fix the confirmation Fix the paid order

Every new order is pending; none reach Processing

  • The payment step is broken for everyone
  • A payment method in test mode, or not connected
  • Confirmations from the provider are blocked for all orders

Check confirmations Checkout not working guide

A paid order was cancelled: “Unpaid order cancelled - time limit reached.”

  • The payment confirmation arrived after the Hold stock time
  • A slow payment method, or confirmations delayed by a block
  • A short Hold stock setting

Hold stock setting Fix the order

Pending orders pile up and are never cancelled

  • Stock management is off, or Hold stock is blank
  • WordPress’s scheduled tasks aren’t running
  • Orders created outside the checkout (they’re never auto-cancelled)

Hold stock setting Scheduled tasks

What each order status means

An order only moves out of Pending payment when the payment method tells WooCommerce what happened. Until then, WooCommerce sends no emails about it: not to you, and not to the customer.

StatusWhat it meansWhat to do
Pending paymentThe order exists; payment hasn’t been confirmed.Check whether money arrived (below). If not, it’s usually an abandoned payment.
FailedThe payment was tried and refused, or an error stopped it.The customer can try again. Many failures at once point to a broken payment method.
On holdWaiting for you, for example a bank transfer, or a payment the provider is still reviewing.Confirm the money arrived, then set it to Processing.
ProcessingPaid. Ready to fulfil.Ship it.
CancelledCancelled by you, the customer, or WooCommerce’s time limit for unpaid orders.If the customer did pay, see “Fix a paid order” below.

When pending orders are normal

WooCommerce creates the order as soon as the customer presses Place order, before the payment is finished. If the customer closes the payment window, is refused by their bank or gives up at a security check, the order stays on Pending payment. A handful a week is normal for most shops.

WooCommerce orders list filtered to Pending payment, showing three orders with the Pending payment status
Orders filtered to Pending payment. Screenshot from our test store.

To check one, open the order and read the Order notes on the right. Payment plugins write there what they saw: a declined card, a cancelled payment, or nothing at all if the customer never got that far.

A WooCommerce order page with the Order notes panel showing the unpaid order was cancelled after the time limit
An order and its notes. Screenshot from our test store.

Paid but pending: the confirmation can’t get through

Card and wallet payments are confirmed by a message the payment provider sends to your store after the payment, called a webhook. If something blocks that message, the customer has paid but the order stays on Pending payment.

Example A payment whose confirmation was blocked
  1. Customer paysThe provider takes the money.
  2. Confirmation refusedA security plugin blocks the provider’s message (error 403).
  3. Order stays on Pending paymentNo “new order” email, so nobody notices.
  4. WooCommerce cancels it“Unpaid order cancelled - time limit reached.” The customer was charged.

Where to look depends on the payment method:

  • Stripe: the Stripe Dashboard lists failed webhook deliveries to your site. Full steps in our Stripe guide.
  • PayPal Payments: in the plugin’s settings, the Troubleshooting section lists your webhooks and has Resubscribe webhooks (use it after a domain change) and Simulate webhooks to test that they arrive.
  • Other payment methods: look for “webhook”, “notification URL” or “callback” in its settings and in the provider’s dashboard.

Common blockers, in the order we’d check them:

  • A firewall, security plugin or CDN bot protection refusing the provider (look for 403 errors in the provider’s delivery log).
  • Maintenance or “coming soon” mode, or a password on the site.
  • A changed site address (a move to https, a new domain, a staging copy) while the provider still sends to the old one.
  • A PHP error on your site when the message arrives: check WooCommerceStatusLogs for that time.

Fix a paid order safely

Only mark an order as paid once you’ve seen the money. Work through this for each one:

The Hold stock setting: when WooCommerce cancels unpaid orders

Under WooCommerceSettingsProductsInventory, Hold stock (minutes) sets how long an unpaid order keeps its stock. The default is 60. When the time is up, WooCommerce cancels the order and adds this note:

The note WooCommerce adds
Unpaid order cancelled - time limit reached.
WooCommerce inventory settings with Manage stock ticked and Hold stock set to 60 minutes
Inventory settings. Screenshot from our test store.
  • It only works when Manage stock is ticked on the same screen and Hold stock isn’t blank.
  • It only cancels orders placed through the checkout. Orders you create in the admin are left alone.
  • If a payment method confirms slowly, a short time can cancel orders that are about to be paid. Raise it rather than leaving it blank: blank means unpaid orders are never cancelled.

Pending orders never cancelled? Check scheduled tasks

WooCommerce cancels unpaid orders with a scheduled task. Open WooCommerceStatusScheduled Actions and search for woocommerce_cancel_unpaid_orders. You should see one pending action, due within the Hold stock time.

WooCommerce Scheduled Actions screen showing the woocommerce_cancel_unpaid_orders action waiting to run
The task that cancels unpaid orders. Screenshot from our test store.
  • Many “past-due” actions: scheduled tasks aren’t running. If your host turned off WordPress’s built-in scheduler, ask them to add a real server task (cron) instead.
  • No action at all: check Manage stock and Hold stock above, then save the inventory settings to schedule it again.

Know next time, before your customers do

A blocked payment confirmation is easy to miss: nothing errors on the checkout page, no email arrives, and the order quietly turns into a cancelled one an hour later. The customer finds out first.

Cart Lookout places a real test order on your store every 2 hours and after every update, then deletes it. Your customers don’t see it and no emails go out. If checkout fails twice in a row, you get an email with the step that broke, a screenshot and the change made just before it.

Cart Lookout store page listing recent plugin updates, each followed by a passing test order
Example: a store page with demo data. Every update is followed by a test order.
See how it works From $15/month · 14-day free trial

Still stuck? Email hello@cartlookout.com and a developer will take a look. More fix guides