ZenWeb - Blog - WooCommerce Orders Stuck on Pending Payment? How to Fix It

WooCommerce Orders Stuck on Pending Payment? How to Fix It

November 5, 2026

Share this post:

WooCommerce Orders Stuck on Pending Payment? How to Fix It
TL;DR: A WooCommerce pending payment order means the order was created but your store never got a “paid” message from the payment gateway. Most of the time the buyer simply did not finish paying. If they did pay, the gateway’s callback was blocked by caching, a firewall, a security plugin or wrong gateway settings. Check the gateway dashboard, read the order notes and logs, fix the callback, then update paid orders by hand.

Your WhatsApp lights up: “I paid through FPX already, why is my order still pending?” You open WP Admin and the order sits on Pending payment. No stock was reduced, no confirmation email went out and you are not sure whether the money arrived.

A WooCommerce pending payment status is not an error by itself. It is the normal first step of every online order. It only becomes a problem when the status never moves even though the customer paid by FPX, DuitNow or e-wallet.

This guide ranks the causes by how often we see them on client stores. It gives fixes based on WooCommerce’s own help pages (checked in October 2026), sets honest timelines and shows how to stop it happening again. If the payment page itself shows an error and customers cannot pay at all, read our guide on why a payment gateway keeps failing at checkout instead. This article is about payments that went through but never updated the order.

The video below shows how stuck background tasks can hold up orders, which is one of the causes covered in Sections 2 and 4.

How to Fix Stuck, Pending, or Past Due Tasks in WooCommerce

Source video: Watch on YouTube (ShieldClimb)

1. What Does Pending Payment Mean in WooCommerce?

Quick Answer: Pending payment means WooCommerce has created the order but has not received confirmation that it was paid. Stock is not reduced and no order email is sent. The order moves to Processing only when the payment gateway tells your store the payment succeeded. If that message never arrives, the order stays pending.

WooCommerce’s order status documentation describes Pending payment as an order that has been received with no payment made, usually waiting for customer action. Compare it with the statuses it is often confused with:

Pending Payment vs Other WooCommerce Order Statuses
Comparison of WooCommerce Pending payment, On hold, Failed and Processing statuses by payment state, stock and what the store owner should do.
StatusPayment received?Stock reduced?What you should do
Pending paymentNot confirmedNoCheck the gateway before shipping
On holdWaiting for you to confirmYesMatch the bank transfer, then mark Processing
FailedNo, declinedNoAsk the buyer to retry with another method
ProcessingYes, paidYesPack and ship

Source: WooCommerce Docs — Order statuses, compiled by ZenWeb, October 2026.

The key difference is who is waiting. On hold waits for you, for example to match a manual bank transfer. Pending payment waits for the gateway. Manual bank transfer orders sitting on Pending payment usually mean the payment method is set up wrongly.

Key takeaway: Pending payment is a “no news yet” status. Never ship a pending order until you have confirmed the money in your gateway dashboard.

2. Why Are WooCommerce Orders Stuck on Pending Payment?

Quick Answer: The most common reason is that the buyer never finished paying, for example by closing the FPX bank page. When the buyer did pay, the gateway’s payment callback (also called a webhook or IPN) was blocked or rejected. Caching, firewalls, security plugins, wrong API keys and stuck background tasks cause most blocked callbacks.

Here is how the causes rank on the Malaysian WooCommerce stores we support:

Why WooCommerce Orders Stay on Pending Payment — Share of ZenWeb Cases
Root causes of WooCommerce orders stuck on Pending payment, ZenWeb client tracking 2024 to 2026.
Root causeShare of cases
Buyer abandoned payment (no money taken)

41%

Callback blocked by firewall, CDN or security plugin

21%

Wrong API keys, webhook URL or test/live mode mix-up

14%

Checkout or order pages cached

10%

Outdated gateway plugin or plugin conflict

8%

Stuck background tasks (WP-Cron or Action Scheduler)

6%

Source: From ZenWeb client tracking of Malaysian SME WooCommerce stores, 2024–2026. Illustrative of typical patterns, not WooCommerce data.

The top cause is not a fault at all. Malaysian buyers often open the FPX bank page, see the amount, then close the tab or switch to another payment method. That leaves a pending order with no money behind it. The other causes are real faults, and WooCommerce’s order troubleshooting guide points to the same two areas: the gateway not completing its response, and webhook notifications not reaching the store. If the idea of a callback is new to you, our explainer on what a payment gateway is covers how the payment round trip works.

Key takeaway: A few pending orders a week is normal shopper behaviour. Pending orders that the gateway shows as paid point to a blocked callback, and that needs fixing today.

Paid orders piling up on pending?

We build and maintain WooCommerce stores for Malaysian businesses, with payment callbacks tested before launch. See our web design services →


3. How to Check If a Pending Order Was Actually Paid

Quick Answer: Search for the order number in your payment gateway’s merchant dashboard first. Then open the order in WooCommerce and read the order notes, and check WooCommerce > Status > Logs for the gateway’s log. A paid transaction in the gateway with no matching note in WooCommerce confirms a blocked callback.

These steps follow WooCommerce’s troubleshooting guidance. You need an Administrator or Shop Manager login and access to your gateway account.

  1. Search the gateway dashboard. Log in to your payment provider and search by order number, amount or the buyer’s email. Confirm whether the transaction shows as successful, failed or never started.
  2. Open the order notes. In WooCommerce > Orders, open the order and read the notes on the right. Transaction IDs, decline reasons or timeout messages show the gateway did reply. No notes at all suggest the gateway never reached your store.
  3. Turn on gateway logging. Most gateway plugins have a debug or logging option in their settings. WooCommerce notes that logs only capture new transactions once logging is on, so place a small test order afterwards.
  4. Read the log. Go to WooCommerce > Status > Logs and open the log named after your gateway. Look for errors such as signature mismatch, 403 Forbidden or timeout.
  5. Check background tasks. Go to WooCommerce > Status > Scheduled Actions and filter by Pending or Past-due. A long list of past-due actions means WP-Cron is not running.

Keep the buyer in the loop while you check. A short WhatsApp reply such as “We can see your order and are confirming the payment” stops them paying twice. Pending orders send no confirmation email, which is why buyers worry so quickly; our guide to WooCommerce emails not sending explains the link.

Key takeaway: The gateway dashboard is the source of truth for money. WooCommerce order notes and logs tell you whether that news ever reached your store.

4. How to Fix a Blocked Payment Callback in WooCommerce

Quick Answer: Match the symptom in your log to its cause. Exclude Cart, Checkout and My Account from caching, allow the gateway’s callback URL through your firewall and security plugin, confirm live API keys and webhook URL, update the gateway plugin, and get WP-Cron running again. Test with a small real order after each change.

Use this table to go straight to the likely fix instead of changing everything at once:

Pending Payment Symptoms, Likely Causes and Where to Fix Them
Diagnostic grid mapping WooCommerce pending payment symptoms to their likely cause and the place to fix each one.
What you seeLikely causeWhere to fix
Gateway shows “paid”, no order notes, 403 in gateway’s delivery logFirewall, CDN or security plugin blocking the callbackFirewall rules, CDN bot settings, security plugin allowlist
“Signature mismatch” or “invalid hash” in the logWrong secret key, or test keys on a live storeGateway plugin settings and merchant dashboard
Buyer sees an old cart or wrong order on returnCheckout or order-received pages cachedCaching plugin and hosting cache exclusions
Callback returns 301 or 302 redirectOld http or non-www URL saved in the gatewayWebhook or return URL in the merchant dashboard
PHP fatal error in the log during paymentOutdated gateway plugin or conflictPlugins page, tested on staging
Many past-due Scheduled ActionsWP-Cron not runningHosting cron job or cron settings

Source: WooCommerce Docs — Troubleshooting orders and caching guidance; ZenWeb audits of Malaysian SME WooCommerce stores, 2024–2026.

Work through the fixes in this order:

  • Exclude dynamic pages from caching. WooCommerce’s caching guidance says Cart, Checkout and My Account must stay dynamic. Exclude them in your plugin and any hosting or CDN cache.
  • Allow the callback through. Ask your gateway for its callback URL or IP range and allow it in your firewall and security plugin. Never switch protection off completely.
  • Re-check keys and URLs. Copy the live keys again from your merchant dashboard and confirm the callback URL uses https and your real domain.
  • Update the gateway plugin. If the store also crashes during payment, see our fix for the WordPress memory limit exhausted error.
  • Get cron running. Ask your host for a real server cron job if Scheduled Actions are past-due.

Test plugin changes on a staging copy where you can. Deactivating plugins on a live shop can briefly leave an add to cart button missing, shipping not showing at checkout or an Elementor editor that won’t load. If an interrupted update leaves a maintenance notice up, follow our guide to WordPress stuck in maintenance mode.

Key takeaway: Let the log choose the fix. One change at a time, followed by one small real order, tells you exactly what solved it.

5. How to Safely Update Orders Already Stuck on Pending

Quick Answer: For each pending order, confirm the payment in your gateway dashboard, then change the status to Processing by hand and add an order note with the transaction ID. Leave unpaid orders alone and let the Hold stock setting cancel them. Never mark an order paid based only on a customer’s screenshot.

Fixing the callback stops new orders getting stuck. It does not update the old ones. Clear the backlog like this:

  • Paid in the gateway: open the order, change the status to Processing, click Update and add a private note such as “Payment confirmed in gateway, transaction ID …”. This reduces stock and sends the customer their receipt.
  • Not paid and not in the gateway: leave it. Under WooCommerce > Settings > Products > Inventory, the Hold stock setting cancels unpaid pending orders after the minutes you set and releases the stock.
  • Paid twice: refund the duplicate through the gateway, not just in WooCommerce, so the money actually returns to the buyer.
  • Customer only sent a screenshot: check the bank reference against your gateway or bank statement first. Edited payment screenshots are a known scam pattern.

Do not set Hold stock too short. A late callback on an already-cancelled order leaves you with a paid but cancelled order. Give buyers enough time to finish an FPX or e-wallet payment, and check cancelled orders against the gateway for a week after any change.

Key takeaway: Every manual status change needs proof from the gateway and a note on the order. That audit trail protects you in refund disputes and at year-end.

6. How Long Does It Take to Fix WooCommerce Pending Payment Orders?

Quick Answer: Settings fixes such as cache exclusions or re-entered API keys take under an hour. Firewall and cron fixes depend on your host and usually take a few hours to a day. Callbacks blocked by a gateway-side issue depend on the provider’s support queue, which can take a few working days.

Use these ranges to plan, not as a promise:

Typical Time to Fix WooCommerce Pending Payment Orders, by Cause
Typical time to fix WooCommerce orders stuck on pending payment for each root cause.
CauseTypical time to fix
Cache exclusions for checkout pages

15–30 minutes

API keys, webhook URL or test/live mode

30–60 minutes

Gateway plugin update or conflict

1–3 hours

Firewall, CDN or cron changes via host

Few hours–1 day

Issue on the gateway provider’s side

2–5 working days

Source: ZenWeb operational observations across Malaysian client WooCommerce stores, 2024–2026. Host and gateway response times vary.

While you wait, check your ads are not paying for a broken checkout. Look out for Google Shopping ads not showing, Meta catalog products getting no impressions or e-commerce tracking broken in GA4, since a stuck payment status often breaks purchase tracking too.

Key takeaway: Most store-side fixes land the same day. If the gateway itself is at fault, confirm paid orders by hand until its support team responds.

Choosing or switching payment gateways?

Compare FPX, card and e-wallet options before you commit, then let us connect it properly. See payment gateway integration in Malaysia →


7. How to Stop Orders Getting Stuck on Pending Payment Again

Quick Answer: Place a small real test order after every plugin, theme, hosting or security change. Keep checkout pages out of every cache, keep the gateway plugin updated, keep a real server cron running and review pending orders against the gateway once a week. Most repeat cases start with an unchecked change.

We run this routine on the stores we maintain:

  • Test after every change. One real low-value order through each payment method after updates or a hosting move. Refund it afterwards.
  • Review weekly. Filter WooCommerce > Orders by Pending payment and compare against gateway transactions for the same week.
  • Watch security tools. When you turn on a new firewall rule or CDN bot protection, re-test the callback straight away.
  • Keep one gateway account owner. Store the merchant login with the business, not a former staff member or freelancer, so keys can be checked quickly.
  • Check analytics too. A broken payment flow often shows up as (not set) in GA4 reports on purchase events.

The same weekly check works across your marketing stack, whether it is Google Ads payment failed, TikTok Ads payment failed in Malaysia or a Meta Verified application pending.

Key takeaway: A two-minute test order after each change and a weekly pending-order review catch almost every blocked callback before customers complain.

8. When Should You Call in an Expert?

Quick Answer: Get help when paid orders keep sticking after you have checked caching, keys and plugins, when the log shows errors you cannot read, when firewall or server cron changes are needed, or when you plan to switch gateways. These fixes touch live payments, so a mistake costs real sales.

Escalate when you see any of these:

  • Every paid order sticks. A store-wide callback failure means lost receipts, stock errors and angry buyers every hour it continues.
  • Server access is needed. Firewall rules, CDN settings and cron jobs live outside WordPress and can take the whole site down if set wrongly.
  • You are changing gateways. Our guide to choosing a payment gateway in Malaysia covers the options; switching needs testing on staging first.
  • The store has outgrown DIY. When checkout problems keep returning, read when a store needs a WooCommerce developer in Malaysia.

ZenWeb is a Google Partner agency that has worked with 500+ Malaysian businesses. Our web design and WooCommerce services cover gateway setup, callback testing and maintenance, so stuck orders get cleared safely.

Key takeaway: Checking the gateway and order notes is safe DIY. Server, firewall and gateway-switch work is where expert help protects your sales.

9. Conclusion

A WooCommerce pending payment order is only a problem when the money has arrived and the status has not. Work in order: confirm the payment in the gateway dashboard, read the order notes and logs, fix whatever blocked the callback, then update paid orders by hand with a note. Let Hold stock clean up the truly unpaid ones, and finish with a test order after every change. For more ways to keep your website and marketing running smoothly, start at the ZenWeb home page.


10. Frequently Asked Questions

1. Should I ship an order that is on Pending payment?

No. Pending payment means WooCommerce has no confirmation of payment. Check the transaction in your gateway dashboard first. If it is paid, change the order to Processing with a note, then ship.

2. Do pending payment orders cancel automatically?

Yes, if the Hold stock setting is on. Under WooCommerce > Settings > Products > Inventory, WooCommerce cancels eligible pending orders after the minutes you set and releases the stock. Leaving the field blank turns this off.

3. Why does a bank transfer order show On hold instead of Pending payment?

On hold means the order is waiting for you to confirm payment, which suits manual bank transfers. Stock is already reduced. Match the transfer in your bank account, then change the status to Processing.

4. Will deleting pending orders fix the problem?

No. Deleting them hides the symptom and can remove orders that were actually paid. Confirm each one against the gateway, fix the blocked callback, and let Hold stock cancel the unpaid ones.

Paid orders still stuck on pending?

Tell us which gateway you use and what your log shows. We will trace the blocked callback, clear stuck orders safely and test every payment method end to end.

Fix my checkout →

Table of Contents
Table of Contents

Get A Free Proposal

Complete the form and our team will contact you to discuss your goals. Let’s grow your business.