“WooCommerce checkout not working” usually means one of a few things: the pay button spins forever, the page reloads with no order created, a payment fails, or you get a vague error.
The good news: most checkout issues come from conflicts, caching, or broken scripts — and can be diagnosed quickly. Here’s the checklist I use on real client sites.
Symptoms (what you’re seeing)
- Spinning “Place order” button (no order created)
- Checkout refreshes and loses fields
- Payment fails (Stripe/PayPal) with generic message
- “There was an error processing your order”
- AJAX 400/500 errors on
?wc-ajax=checkout
Step 1: Check your browser console + network
Open DevTools → Console/Network and look for red errors. Specifically check the request to:
/ ?wc-ajax=checkout/wp-admin/admin-ajax.php
If you see a 500 error, it’s usually a PHP/plugin problem. If you see 400/403, it can be security rules, caching, or missing nonce/session.
Step 2: Plugin conflict test (fastest win)
Most checkout breakages are caused by one plugin interfering with checkout scripts, validation, or sessions.
If disabling a plugin fixes it, you’ve found your culprit. Then you either:
- Replace the plugin, or
- Configure exclusions, or
- Patch the conflict properly
Step 3: Caching/CDN exclusions (very common)
Checkout pages must not be cached. If you’re caching checkout, users can get mismatched sessions, missing nonces, or “invalid order key” style issues.
Exclude these URLs from caching
/cart//checkout//my-account//?add-to-cart=/?wc-ajax=
Also exclude WooCommerce cookies from cache variation if your caching layer supports it.
Step 4: Theme overrides and checkout templates
If your theme overrides WooCommerce templates, outdated overrides can break checkout on Woo updates.
Check for overrides at:
wp-content/themes/YOUR_THEME/woocommerce/
Step 5: Payment gateway configuration
For Stripe/PayPal failures:
- Confirm live keys vs test keys
- Check webhook delivery (Stripe dashboard → Webhooks)
- Confirm server time is correct (bad time can break signatures)
- Check for blocked requests by security plugins/WAF
Step 6: Server-side errors (logs)
If checkout returns 500, check:
- WooCommerce → Status → Logs
- PHP error log in hosting panel
wp-content/debug.log(if enabled)
A common cause: a fatal error in a custom plugin or functions file.
Quick “fix it fast” summary
wc-ajax=checkout errors✅ Disable non-essential plugins (conflict test)
✅ Exclude checkout/cart/account from caching/CDN
✅ Check theme WooCommerce template overrides
✅ Verify payment gateway keys + webhooks
✅ Review Woo logs + server logs for fatal errors
If you’re stuck, send me the site link + what you’re seeing ↗. I can usually identify the root cause quickly and fix it without trial-and-error.