WooCommerce Orders Not Saving: Inventory Submitted but Nothing Recorded

The save button confirmed it. The order screen showed success. Then you checked the dashboard and the order was not there. Or it was there with a status that never resolved. Or the inventory count did not change, even though the purchase went through.

This is a different failure from a broken checkout. The checkout worked. The problem is downstream of it, in the layer that writes the order to the database and updates the records that depend on it. It is harder to spot because nothing on the surface tells you it happened.

Here is how to find it.

Confirm what actually failed

Before you diagnose, get precise about what broke. These are three different problems that look similar on the surface:

The order does not appear in WooCommerce > Orders at all. The transaction may or may not have processed at the payment gateway. The order record was never created in WordPress.

The order appears with a “Pending payment” status that never updates. The order record was created, but the payment confirmation from your gateway never reached WordPress. The gateway processed the payment. WordPress does not know.

The order saved, payment confirmed, but inventory did not update. The order is complete. The stock count is wrong. The write to the inventory layer failed silently after the order was recorded.

Each of these has a different cause. Knowing which one you have determines where you look first.

Orders not appearing at all

If no order record is created, the failure happened during the checkout submission process before WordPress had a chance to write anything. This is the same territory as a broken WooCommerce checkout: a PHP fatal error, a plugin conflict, or a JavaScript failure that prevented the form data from reaching the server.

Check your PHP error log for fatal errors from the time of the failed order. A fatal error in a WooCommerce file or a plugin that hooks into the checkout process will prevent the order record from being written without producing any visible error on the front end.

Also check your payment gateway’s dashboard directly. If the payment shows as processed there but no order exists in WordPress, the gateway received the submission but the callback that tells WordPress the payment succeeded never fired or was blocked.

Orders stuck in “Pending payment”

This is almost always a webhook problem. When a customer pays, your payment gateway sends a notification to your WordPress site confirming the payment. WooCommerce listens for that notification and updates the order status. If the notification never arrives, or arrives and gets blocked, the order stays pending indefinitely.

Go to your payment gateway’s dashboard and look at the webhook settings. The webhook URL should point to your site. A common cause of this breaking: you moved to a new domain, switched from HTTP to HTTPS, or changed your site URL, and the webhook URL in the gateway settings was not updated to match.

Security plugins and firewall configurations also block webhook callbacks. If your webhook URL is correct and the gateway shows it is sending the notification, the notification is being blocked before it reaches WooCommerce. Check your security plugin’s blocked requests log, or temporarily disable it and run a test order to confirm.

WooCommerce has a built-in log for payment gateway activity. Go to WooCommerce > Status > Logs and look for your gateway’s log file. It records every communication between WooCommerce and the gateway and will show you whether the callback arrived and what happened when it did.

Inventory not updating after a completed order

This is the quietest failure of the three. The order is complete. The customer has a confirmation. The inventory number is wrong. Nothing flagged it.

First check: go to the product in WooCommerce and verify that stock management is enabled for it. If “Track stock quantity for this product” is not checked, WooCommerce will not update inventory regardless of what orders come through. This sounds obvious but it is the cause more often than it should be.

If stock management is enabled and inventory is still not updating, the failure is in the hook that processes stock reduction after an order completes. Something is interrupting that process silently.

Look in your debug log for warnings or errors from the time orders are completing. A warning involving wc_reduce_stock_levels, woocommerce_payment_complete, or any inventory-related WooCommerce function is the signal. These warnings do not stop execution, which is why the order appears complete. They do interrupt the stock update, which is why the inventory is wrong.

This was the failure that cost me the most hours building FMX. The product page said six in stock. I added two to the cart. The cart accepted it. Then I refreshed, and the cart said one was available. The database said six. The product editor said six. The debug log said six. The cart kept saying one. It took adding direct logging to the inventory function to see that the cart was reading from a cached value that had not been invalidated after a plugin update changed how the cache key was generated. Nothing on the surface pointed there. The log did.

The common thread

All three of these failures share one characteristic: the system gave you a success signal it had not earned. The checkout appeared to work. The payment appeared to process. The order appeared to save. The evidence that something went wrong was in the database and the logs, not on the screen.

This is why having a way to see what the system actually did, separate from what it appeared to do, is not optional for anyone running a WooCommerce store. Loupely captures browser state and server logs together at the moment of a failure, correlates them, and tells you in terms you can act on where the success signal and the actual system behavior diverged. If these silent failures are a recurring problem on your site: useloupely.com