WooCommerce checkout not working is not one fault: it is a chain of five steps, and any link can break while the rest look fine. The fastest diagnosis walks the money path in order: product page, cart, checkout render, payment call, order creation. This guide shows you how to find the broken link before changing anything, because on a store every wrong guess costs real orders.
WooCommerce checkout not working? Walk the money path
First, open an incognito window and buy a cheap product with a real card or the gateway’s test mode. Note exactly where the journey stops. The failure point tells you which layer to inspect, and it is rarely the layer the error message blames.
There are five places it can stop, and each points somewhere different.
- Add to cart does nothing or the cart stays empty. A session or caching problem, not a payment problem.
- The checkout page renders blank or shows only the header and footer. A template, block or fatal-error problem.
- Place Order spins forever. A JavaScript or AJAX problem.
- The card is declined or errors. A gateway problem, or the site never reached the gateway at all.
- Payment succeeds but no order appears, or the order stays “pending payment”. A webhook or callback problem.
Write down which one you have before reading further. Most wasted hours on WooCommerce checkout not working come from fixing a different link than the broken one.
The cart empties or add-to-cart does nothing
Sometimes WooCommerce checkout not working turns out to be a cart fault one step earlier. WooCommerce keeps the cart in a session tied to a cookie, so when the cart empties between pages, something is breaking that continuity.
Caching is the usual cause. Cart, checkout and my-account must never be served from a page cache. Exclude them at every layer you run: the caching plugin, the host’s own cache, and any CDN in front. A cached cart page shows one customer another customer’s basket, which is worse than an empty one.
Then check whether a security or optimisation plugin is stripping cookies. Also check whether the site answers on both the www and non-www hostname. A cookie set on one host is not sent to the other, so the cart resets whenever a visitor crosses between them.
The checkout page renders blank or incomplete
A blank checkout with a working header usually means a fatal PHP error inside the checkout template. Read the error log rather than guessing, exactly as you would for any WordPress white screen. The log names the file, and that is the whole diagnosis.
A checkout that renders but is missing its fields is a different problem. WooCommerce now ships both the classic shortcode checkout and the newer Checkout block. The two do not behave identically, and a theme or extension written for one can render nothing useful on the other. So confirm which one your checkout page uses before you debug the fields. The fix depends entirely on that answer.
Also check for a plugin that customises checkout fields. Field-editor plugins routinely break after a WooCommerce release, and they fail by removing fields rather than by throwing an error.
Checkout renders but Place Order hangs
This is the most reported shape of WooCommerce checkout not working. A spinning Place Order button is usually a JavaScript error or a blocked AJAX call, so open the browser console before clicking. A red error naming a plugin file is your lead, and it is often a script conflict introduced by an unrelated update.
Then watch the Network tab while you click. WooCommerce posts to an admin-ajax or Store API endpoint, and what happens to that request tells you the rest.
- No request at all. JavaScript died before sending. Check the console error.
- A 403 response. A security rule or firewall is blocking it. Web application firewalls block checkout requests surprisingly often after a rule update.
- A 500 response. A PHP fatal error during processing. The error log names it.
- A 200 response with an error message inside. Validation is rejecting something, frequently a required field the customer cannot see.
Caching is the classic offender here too. A misconfigured page cache strips the security nonce that checkout requires, and the request then fails validation every time while looking perfectly normal in the browser.
Card errors and gateway declines
If the customer reaches the gateway and gets an error, read the gateway’s own dashboard first. Stripe, Square and PayPal all log every attempt with a reason, and that log settles the question immediately.
The distinction that matters: did the site call the gateway at all? If the attempt does not appear in the gateway dashboard, this is a site fault. If it appears and was declined, it is a card or configuration issue on the gateway side.
Site-side causes cluster around credentials. Test keys left in place after go-live, live keys revoked or rotated, an API version the plugin no longer supports, or an outdated TLS configuration on the server. Square adds one more: the location ID must match the account the keys belong to, and a mismatch fails in a way that reads like a decline.
So check the obvious first. A store that stopped taking payments on the same day someone regenerated an API key has told you the answer already.
Payment taken but the order never appears
This is the most damaging version of WooCommerce checkout not working, because the customer has been charged and your store does not know it.
Almost always this is a webhook problem. The gateway confirms payment asynchronously by calling back to your site, and if that call never lands, the order stays at “pending payment” forever while the money sits in the gateway.
Check three things, in order. First, the webhook endpoint URL registered in the gateway must match your live site, including https and the correct hostname. Second, the signing secret in the plugin settings must match the one the gateway shows now. Regenerating it in the dashboard silently invalidates the old value. Third, read the gateway’s webhook log. It shows delivery attempts and response codes, so it tells you whether your server is refusing them.
Meanwhile, reconcile the affected orders by hand against the gateway’s records before you change anything else. Customers who paid deserve their order regardless of how long the fix takes.
Orders created but emails missing
A completed order with no confirmation email is a mail-delivery fault, not a checkout fault, and it is frequently reported as “checkout is broken” by customers who simply never heard back.
Consequently, test whether WordPress sends any mail at all. The guide on WordPress emails not sending walks that chain step by step. Then check whether order emails are disabled under WooCommerce settings. Also remember that order emails fire on status transitions. An order stuck at pending payment never reaches the status that sends the receipt, which loops you back to the webhook section above.
After any fix: verify the whole path
Whatever you change, walk the full money path again afterwards, including the order email and the gateway dashboard entry. Then check that the fix survives a cache flush and a second order. A checkout that works once is not a verified checkout, and WooCommerce checkout not working intermittently is harder to chase than a checkout that fails every time.
Test with a real payment method as well as the sandbox, since test mode bypasses exactly the credential problems that cause most live failures. Finally, refund your own test order rather than leaving it in the books.
Quick checklist
In short: reproduce as a customer and note where it stops. Read the browser console and Network tab at that point. Check the gateway’s own dashboard before blaming the site. Keep cart and checkout out of every cache. Verify webhooks when payment succeeds without an order. Then walk the full path twice after any change.
Most importantly, a store with WooCommerce checkout not working needs one careful fix, not five hopeful ones. Every extra change made in parallel is a change you will have to undo later to find out what actually worked.
When the store cannot afford experiments
Every diagnostic step above is safe. The fixes, however, touch payment configuration, and mistakes there cost money quietly. Our WooCommerce support service exists for the paths that take money: reproduce the fault, fix it with the smallest change, then verify the full order flow end to end including the gateway’s own records.
Tell us where the checkout stops and which gateway you use. If orders are failing right now, urgent WordPress help begins with containment and evidence rather than configuration changes.
For reference, the official WooCommerce self-service guide covers the diagnostic side of everything above, and configuring WooCommerce settings documents where each option named here actually lives.