A customer messages to say they paid, and you cannot find their order. Or the shop has been quiet all week, which seems odd until you notice the “New order” emails have stopped. Or the orders are there, but they sit in Pending payment even though the money arrived in your gateway account.
These feel like the same emergency, but they are three different faults. One is an order that was never created. One is an order that exists but is hidden or stuck. One is an order that is fine but nobody was told about it. Working out which you have is most of the job.
Step zero: is the order really missing?
Before changing anything, spend five minutes confirming what is actually there.
- Check the payment side. Log in to your gateway dashboard (Razorpay, PayU, Stripe, PayPal or whichever you use) and find the payment. Note the time, amount and any order number or reference it shows.
- Search the order list properly. In WooCommerce > Orders, use the search box with the customer’s email address or surname. Then click All at the top of the list, so you are not filtering by one status by accident.
- Look at every status. Pending payment, On hold, Failed and Cancelled orders are easy to miss if you normally look only at Processing.
- Check the customer. If the buyer has an account, open their user profile. Some customers check out twice with different email addresses.
If the payment exists at the gateway and there is no matching order of any status, the order was never created, or it was created on a different site (a staging copy taking real payments is a surprisingly common one). If there is an order but in the wrong state, the problem is the link between the gateway and your store. If the order is fine, the problem is notifications.
For the bigger picture of WordPress and WooCommerce faults, our WordPress error guide lists the common ones and where each is covered.
Case 1: orders stuck in Pending payment
This is the most common situation we are asked about. The customer completed payment, but WooCommerce still thinks they have not.
Here is why. When a customer pays on the gateway’s page, the gateway has to tell your store the payment succeeded. It does that by sending a message to a special address on your site, often called a webhook or callback. If that message never arrives, or arrives and is rejected, the order stays pending. Then the Hold stock setting (WooCommerce > Settings > Products > Inventory) may cancel the unpaid order once its time runs out, which makes it look as if the order vanished.
Things that commonly block that message:
- A firewall, security plugin or CDN rule treating the gateway’s request as suspicious.
- The webhook address or secret in the gateway dashboard being wrong, often after a domain change or a move to https.
- The site being in maintenance mode or behind password protection when the request arrives.
- A PHP error in the gateway plugin when it processes the message.
Check WooCommerce > Status > Logs. Most gateway plugins write a log there, and the entries around the time of the payment usually say exactly what went wrong. The gateway’s own dashboard often shows webhook delivery attempts and the response your site returned. Our page on payment gateway errors goes into the gateway side in more depth.
Once the cause is fixed, check each affected payment in the gateway dashboard before you move its order to Processing by hand. Only change the status of orders you have confirmed were paid.
Case 2: the order was never created
If money arrived but there is no order at all, something failed during checkout itself. Usually the customer saw an error or a blank page after paying and assumed it worked. Common reasons:
- A fatal PHP error at the moment the order is saved, often from a plugin that hooks into checkout (invoice, SMS, CRM or shipping plugins).
- The database running out of space or refusing writes on a tight hosting plan.
- Checkout pages being cached, so customers are posting old forms with expired security tokens.
- Payments taken on a staging or old copy of the site that still has live gateway keys.
Turn on WP_DEBUG_LOG (on a copy if you can), check wp-content/debug.log and the WooCommerce logs for fatal errors at the time of the failed order. If checkout errors are the root, our checkout repair page explains how we trace them.
Case 3: orders exist in one place but not another
Newer WooCommerce versions can store orders in their own database tables, a feature called High-Performance Order Storage (HPOS). Older stores kept orders as WordPress posts. You can see which one your store uses under WooCommerce > Settings > Advanced > Features.
Problems appear when an older plugin, report or export tool still reads orders from the old place while new orders are being saved in the new tables. The orders are there in WooCommerce > Orders, but your accounting export, stock sync or reporting plugin does not see them. WooCommerce offers a compatibility mode that keeps both copies in sync, and it warns you on that screen when an active plugin has not declared support for HPOS. If a plugin is listed as incompatible, ask its developer before switching storage modes.
This is not something to toggle back and forth on a live store. Switching storage with sync turned off can leave orders in only one of the two places. Take a full database backup first, and ideally test on staging.
Case 4: the orders are fine, but no email arrived
WooCommerce sends the New order email to the shop owner when an order moves into Processing or On hold, not when it is created as Pending payment. So if orders are stuck as pending (Case 1), the email never fires, and the two problems feed each other.
If orders are reaching Processing and the email still does not arrive:
- Go to WooCommerce > Settings > Emails and open New order. Check it is enabled and the recipient address is correct. Several addresses can be entered separated by commas.
- Look in spam, and in any filter rules on the receiving mailbox.
- Check whether WordPress is sending mail at all. Most hosts’ default mail function is unreliable, and messages from it are often rejected by Gmail or Outlook. Our guide to WordPress email problems covers SMTP and the DNS records that make mail trusted.
- If you use an SMTP plugin, its email log will show whether the message was sent and what the mail server replied.
Case 5: background tasks not running
WooCommerce uses a queue called Action Scheduler for many background jobs: some emails, webhooks, subscription renewals, stock syncs. You can see it under WooCommerce > Status > Scheduled Actions. A long list of Pending or Failed past-due actions means the queue is not being processed, and order-related jobs may be waiting there.
The queue depends on WordPress cron, which only runs when someone visits the site unless a real server cron job is set up. On a quiet shop, or one where cron is disabled, jobs pile up. Our post on WordPress cron not running explains how to check and fix that.
A sensible order of checks
| What you see | Check first |
|---|---|
| Paid at gateway, order Pending | WooCommerce logs and the gateway’s webhook history |
| Paid at gateway, no order at all | debug.log for fatal errors; any other copy of the site using live keys |
| Order in WooCommerce, missing in a report or export | Order storage settings and plugin compatibility |
| Order Processing, no email | Emails settings, then mail delivery |
| Many past-due scheduled actions | WordPress cron |
What to tell the customer while you look
The customer who started this usually wants one thing: to know their money is safe. You do not need to have found the fault to reassure them. Ask for the payment reference or a screenshot of the payment confirmation, match it in your gateway dashboard, and tell them honestly that the payment has reached you and the order is being checked. If you cannot find the payment at all, say so and ask them to check with their bank or card provider before paying again.
Avoid asking them to place the order a second time until you know whether the first one went through. Duplicate payments are harder to sort out than a delayed order, and refunds take longer than an apology. Keep a short note of each affected customer, payment reference and what you did, because you will want it when you fix the cause and check every order from that period.
Preventing it next time
- Place a small real test order after every update to WooCommerce, your gateway plugin or anything touching checkout, and confirm it reaches Processing and the email arrives.
- Make sure staging copies use the gateway’s test keys, never live ones.
- Exclude cart, checkout and account pages from every layer of caching.
- Set up proper SMTP sending rather than relying on the host’s default mail.
- Glance at Scheduled Actions and the logs once a week. Problems usually show up there before customers notice.
If orders are going astray right now
A shop losing orders is urgent, and the details matter: which gateway, which statuses, and what the logs say. If you would like help, message us with a screenshot of the order list and the gateway payment. We will take a backup before touching anything, find where the orders are going, and tell you what we changed. Our WooCommerce support page explains how we work with stores.
Problems like this are easier to spot early when someone does regular webshop maintenance and checks orders after each update.
Next in this series: WooCommerce Cart Empty After Adding Products? Fix It