WooCommerce / Checkout
WooCommerce checkout problems
Checkout failures look the same to customers — a spinner, an error, nothing — but the causes range from a JavaScript error to a PHP fatal error to a payment gateway response. The fastest route to the cause is finding which layer fails first.
Short answer
Open the browser's Network panel and place a test order. If no checkout request is sent, the problem is JavaScript. If the request (?wc-ajax=checkout, or the Store API for the Checkout block) returns an error, read the PHP and WooCommerce logs. If the order is created but payment fails, the problem is in the gateway handoff.
Technical resources
Checkout guides
Specific problems
Common checkout failures
Checkout not working at all
No customer can complete an order.
Checkout keeps loading
The request failed, timed out or returned output the page cannot parse.
Fails after clicking Place Order
A PHP error, validation failure or gateway rejection during order creation.
Works logged in, fails for guests
Cached checkout pages, expired nonces, account and guest settings.
Broke after a plugin update
A changed hook, a JavaScript dependency or a removed template.
Slow checkout
Time spent in PHP, the database or external API calls.
Find the failing layer first
| What you see in the Network panel | What it means | Where to look next |
|---|---|---|
| No request when clicking Place Order | The browser never sent it | Console errors, blocked or deferred scripts |
| Request returns 500 | PHP failed on the server | fatal-errors log, PHP error log |
| Request returns 403 | Something blocked it | Security plugin, WAF or CDN rules, REST API restrictions |
| 200 with an error message | WooCommerce rejected the order | Validation, fields, coupons, gateway response |
| 200, order created, payment fails | Gateway handoff | Gateway log, provider events |
Classic checkout and the Checkout block
The classic checkout ([woocommerce_checkout] shortcode) submits to ?wc-ajax=checkout. The Checkout block — the default for new stores — places orders through the Store API under /wp-json/wc/store/v1/. They fail in different places: a rule that blocks the REST API breaks only the block, and an extension built only for the classic checkout may silently do nothing on the block.
What not to do
- Do not disable plugins one by one on a live store during trading hours: it can break other flows and loses orders in progress.
- Do not page-cache checkout, cart or account pages, or minify and defer the checkout scripts without testing a full order.
- Do not edit WooCommerce core files or copy core templates to "fix" checkout. The fix will be lost at the next update.
Frequently asked questions
Why does WooCommerce checkout keep loading?
Usually because the checkout request failed or returned something the page could not read: a PHP fatal error, a PHP notice printed into the response, a timeout, or a request blocked by a security rule. The response of the checkout request in the Network panel shows which.
Why does checkout work for logged-in users but not guests?
Often because the checkout or cart page is served from a page cache to visitors without a session, with an expired security nonce. Checkout, cart and account pages must be excluded from page caching.
Can a plugin update break checkout?
Yes. An update can change a hook, a filter priority or a JavaScript dependency that another extension, the theme or custom code relies on.
$ describe the problem
Have a WooCommerce problem?Request a diagnosis.
Tell us what is failing, what changed recently and the business impact. We review every request and recommend the appropriate next step.
Never send passwords, API keys or card data through the form.