Skip to content
WooRescueHQ

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.

Specific problems

Common checkout failures

Checkout not working at all

No customer can complete an order.

/woocommerce/checkout/not-working/

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.

/woocommerce/errors/plugin-conflict/

Slow checkout

Time spent in PHP, the database or external API calls.

/woocommerce/performance/slow-checkout/

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.

Request a diagnosis See services and prices

Never send passwords, API keys or card data through the form.

Diagnosis from€299

Request a diagnosis