- Most checkout failures come from a plugin or theme conflict, a cached checkout page, or payment gateway settings.
- Test on a staging copy where you can. Never experiment on a live store during business hours.
- The browser console and WooCommerce → Status → Logs usually point straight at the cause.
A broken checkout is the most expensive bug a store can have. Visitors find the product, add it to the cart, and then the "Place order" button spins forever, a payment fails, or the page simply reloads. Every hour it stays broken is lost sales.
Here are the causes we find most often when fixing WooCommerce checkouts, and how to track each one down.
Before you start
- Take a full backup (files and database), or work on a staging copy if your host provides one.
- Reproduce the problem. Try a real test order in a private browser window, logged out. Does it fail every time, or only with certain products, payment methods or countries?
- Write down the exact error message, if there is one. "There was an error processing your order" and "No shipping options were found" point to very different causes.
- Open the browser console (right-click → Inspect → Console) before clicking "Place order". Red JavaScript errors there are a big clue.
Plugin or theme conflict
This is the number-one cause, especially right after an update. Two plugins, or a plugin and your theme, interfere with each other and the checkout breaks.
How to find it: install the free Health Check & Troubleshooting plugin. Its troubleshooting mode lets you browse with all plugins disabled and a default theme, while customers still see the normal site. Enable WooCommerce plus your payment plugin, test the checkout, then re-enable other plugins one by one until it breaks. The last one you enabled is your suspect.
The checkout page is being cached
Cart, checkout and "My account" pages are different for every customer, so they must never be cached. If they are, customers can see someone else's cart, totals don't update, or orders fail with security ("nonce") errors.
How to fix: check your caching plugin and your host's server cache, and make sure the cart, checkout and account pages are excluded. If you use a CDN like Cloudflare with full-page caching, check its rules too. After changing settings, purge all caches.
Payment gateway settings
If the checkout loads but payments fail, look at the gateway first:
- Test mode vs live mode: a store left in test or sandbox mode can't take real payments. Live keys used in test mode fail the other way round.
- API keys: regenerated or expired keys break payments instantly. Re-copy them from your Stripe, PayPal or other account.
- Webhooks: gateways like Stripe use webhooks to tell your store a payment succeeded. If the webhook is missing or failing, customers are charged but orders stay "Pending payment".
- Currency and country: some payment methods only appear for certain currencies or billing countries.
Your payment provider's dashboard usually shows the exact reason a payment was declined or failed, so check it alongside WooCommerce.
Checkout block vs classic checkout
Newer WooCommerce stores use the Checkout block by default, while older stores use the classic [woocommerce_checkout] shortcode. Some payment, shipping and checkout-field plugins only support one of the two.
How to fix: check whether each checkout-related plugin supports the block checkout. If a key plugin doesn't, switching the checkout page back to the classic shortcode is a valid fix while you wait for an update.
Outdated theme templates
Many themes override WooCommerce's template files to change the design. When WooCommerce updates and the theme doesn't, those old templates can break the cart or checkout.
How to find it: go to WooCommerce → Status and scroll to the Templates section. Any file marked as outdated needs a theme update, or a developer to update the override.
Shipping zones and methods
"No shipping options were found" usually isn't a bug. The customer's address simply doesn't match any shipping zone with an active method.
How to fix: under WooCommerce → Settings → Shipping, make sure every country you sell to is in a zone, and that each zone has at least one shipping method enabled. Also check products for missing weights or shipping classes if you use rate-based shipping.
Security plugins and firewalls
The checkout talks to your server in the background. If a security plugin, host firewall or CDN security rule blocks those requests, the checkout hangs or shows a generic error.
How to find it: look for blocked requests in your security plugin's logs or your CDN's firewall events while you test an order. Requests involving wc-ajax or /wp-json/wc/store/ are checkout requests and should be allowed.
PHP errors and memory limits
Sometimes the server itself throws an error mid-checkout. WooCommerce records many of these. Go to WooCommerce → Status → Logs and look for fatal-errors logs around the time of the failed order.
Low PHP memory limits and outdated PHP versions are common culprits. Tools → Site Health → Info shows both. Your host can raise the memory limit or update PHP. Test on staging first.
Quick checklist
- Can you reproduce it in a private window, logged out?
- Any red errors in the browser console?
- Does it work in troubleshooting mode with other plugins disabled?
- Are cart, checkout and account pages excluded from every cache?
- Is the gateway in live mode, with valid keys and working webhooks?
- Any outdated templates under WooCommerce → Status?
- Anything in WooCommerce → Status → Logs or your firewall logs?
If you've been through the list and orders still fail, or you can't afford to experiment on a live store, get a developer to look at it. A checkout fix is usually quick once the cause is found, and finding it is the part that takes experience.