WooCommerce Checkout Not Working
Fix checkout spinning, reloading or rejecting orders by identifying whether validation, JavaScript, payment webhooks, sessions, caching or a plugin conflict failed.
Quick fix: reproduce checkout once in a private window using a test payment method. Keep browser Console and Network open, then check WooCommerce → Status → Logs and the order list. Determine whether the failure happens before order creation, during payment, or after payment while returning to the site.
Do not repeatedly place live charges while diagnosing. Use the gateway sandbox and a staging copy that matches production.
Classify the checkout failure
Different symptoms point to different layers:
- No order created: validation, JavaScript, session or API request failed.
- Pending/failed order created: gateway request began but was declined or interrupted.
- Payment captured, order still pending: webhook or callback did not update WooCommerce.
- No shipping method: address, zone, product or shipping logic problem.
- Only one browser/device fails: client script, cookies or browser extension.
- Only logged-in users fail: account, role or saved-address customization.
Record the time, test email, payment method, browser and any order ID so logs can be correlated.
Verify the WooCommerce pages
Open WooCommerce → Settings → Advanced and confirm Cart, Checkout and My Account point to the intended published pages. Use WooCommerce → Status → Tools if the current WooCommerce version provides a supported page-creation or verification tool.
Check that the Checkout page contains the expected Checkout block or shortcode—not both, and not a builder template that removed the functional content.
Inspect browser errors and requests
Open Developer Tools before submitting checkout.
In Console, look for the first JavaScript error. In Network, inspect failed requests to WooCommerce AJAX, Store API, REST or payment-provider endpoints.
Useful evidence includes:
- status code;
- response body;
- request URL;
- blocked mixed-content or CSP message;
- gateway script failing to load;
- HTML error page returned where JSON is expected.
A generic spinner is not the cause—it means a request never completed successfully.
Check WooCommerce and PHP logs
Open WooCommerce → Status → Logs and select entries matching the test time and gateway. Also inspect Action Scheduler failed actions and the server PHP log.
Enable private WordPress debugging only if the existing logs do not expose the failure. Follow How to Enable WordPress Debug Mode and disable it after reproducing once.
Test the payment gateway
Enable sandbox/test mode and use the provider’s documented test credentials. Verify:
- API keys belong to the same test/live mode;
- required webhook endpoint is reachable over HTTPS;
- webhook signature secret matches;
- site URL has not changed since connection;
- the currency and country are supported;
- the gateway extension is current;
- payment fields are not blocked by consent, CSP or optimization scripts.
If an order is created but never moves after a successful payment, inspect webhook delivery at the provider before altering checkout fields.
Exclude checkout from caching
Exclude Cart, Checkout and My Account at every cache layer:
- WordPress page cache;
- managed-host cache;
- reverse proxy;
- CDN edge cache;
- HTML optimization that delays payment JavaScript.
WooCommerce cookies and API endpoints may also require bypass rules. Use the host or plugin’s WooCommerce-specific documentation rather than a broad “never cache anything” rule.
Clear existing cached checkout responses after changing exclusions. If stale content affects the rest of the site, use WordPress Changes Not Showing.
Check HTTPS, cookies and sessions
Checkout should use one canonical HTTPS host. Mixed www/non-www or HTTP/HTTPS URLs can split cookies and invalidate nonces.
Test with cookies enabled in a private window. Check WordPress Address, Site Address, proxy HTTPS detection and CDN redirects. Avoid a redirect chain during checkout callbacks.
Verify shipping and tax inputs
If checkout blocks after entering an address, confirm the physical product matches a zone with an enabled method. Test a complete address including state and postcode.
For missing rates, use How to Set Up WooCommerce Shipping. For tax errors, compare store address, customer location, configured rates and the selected automated service logs.
Run a safe conflict test
On staging:
- take a fresh backup;
- switch to a current default or WooCommerce-compatible theme;
- keep WooCommerce and one payment gateway active;
- disable checkout customizers, optimization and unrelated plugins;
- place a test order;
- re-enable components one at a time.
The official WooCommerce documentation identifies theme/plugin conflicts as a common reason payment fields or checkout loading fail. Do not deactivate live payment, membership or security plugins during real customer sessions.
Check template overrides and custom code
Open WooCommerce → Status and review outdated template overrides. Compare customized checkout templates with the current WooCommerce versions.
Temporarily remove checkout snippets on staging, especially code that changes fields, totals, fragments or redirects. A snippet can remain syntactically valid while depending on a removed hook or old checkout architecture.
Verify the repair
Complete at least these cases:
- guest and logged-in checkout;
- desktop and mobile;
- valid and declined test payment;
- every enabled gateway;
- coupon and no coupon;
- each major shipping zone;
- account creation and returning customer;
- payment webhook and order email.
Monitor logs and real failed-order rate after deployment. Keep the exact rollback package available, and never restore an old store database without accounting for orders placed since the backup.
Frequently asked
- A failed checkout AJAX or Store API request, JavaScript conflict, blocked payment field, cached response or server error can leave the interface waiting. Inspect Network and Console before changing settings.
- Look for a validation notice, missing required field, expired session, nonce failure, payment-provider rejection or a custom checkout plugin redirecting the request.
- No full-page cache should serve personalized Cart, Checkout or My Account responses. Exclude the relevant URLs, cookies and WooCommerce endpoints at plugin, host and CDN layers.