Guides / WordPress
Why is my WooCommerce checkout not working?
By the WebFixed team. Last updated 21 September 2026.
The short answer
A WooCommerce checkout most often fails for one of five reasons: the payment gateway is misconfigured or left in test mode, a caching plugin or host cache is storing the cart and checkout pages, a plugin or theme is clashing with the checkout, the SSL certificate is not working properly, or no shipping method covers the customer’s address. Start by placing a test order yourself in a private browser window and noting the exact error message. Then check WooCommerce, then Settings, then Payments, and look at the logs under WooCommerce, then Status, then Logs, which usually record why a payment failed.
Find out exactly where checkout fails
The point at which checkout breaks tells you where to look. Go through the order yourself in a private browser window, logged out, as a customer would.
- The basket is empty when you reach checkout, or shows someone else’s items: this points to caching.
- No payment methods appear, or the message says no payment methods are available: look at the gateway settings and the shop currency.
- A message says no shipping options are available: look at shipping zones.
- The Place order button spins for ever or nothing happens: a plugin or theme conflict, or a JavaScript error, is likely.
- The card is declined or an error appears after clicking Place order: look at the gateway’s mode, its keys and its log.
- The browser warns the page is not secure: look at SSL.
Check the payment gateway settings and test mode
- Go to WooCommerce, then Settings, then Payments, and check that the payment method is switched on.
- Open the gateway’s settings using the Manage button and look for a test mode or sandbox option. In test mode, real cards are refused and only the provider’s test card numbers work, so a shop left in test mode cannot take money.
- Check the gateway is still connected. Stripe, PayPal and WooPayments each show a connection status, and live and test modes use separate keys. If the account was reconnected or the keys were changed at the provider, they must be updated here as well.
- Log in to your account with the payment provider and look for notices. Providers pause payments when they need identity or business verification.
- Confirm your shop currency under WooCommerce, then Settings, then General, is one the gateway supports.
Changing payment settings on a live shop affects real customers immediately. Note the current settings before you change them, and make changes at a quiet time.
Stop caching on the cart, checkout and account pages
The basket, checkout and My account pages are different for every customer, so they must never be cached. When they are, customers see empty baskets, other people’s details or a message that their session has expired. The well known caching plugins exclude these pages automatically when they detect WooCommerce, but caching at the host, or a Cloudflare rule that caches everything, often does not.
- Check which pages WooCommerce uses under WooCommerce, then Settings, then Advanced, in the Page setup section.
- In your caching plugin, find the setting for pages or URLs that should never be cached, and make sure the cart, checkout and my-account addresses are listed.
- Ask your host whether server caching is active and whether it excludes WooCommerce pages and cookies.
- If you use Cloudflare, check for any cache rule that applies to the whole site and add exceptions for these pages.
- Clear every cache, then go to WooCommerce, then Status, then Tools, and run Clear transients.
Check SSL, shipping zones and plugin conflicts
SSL is the certificate that gives your site its padlock and https address. Payment gateways require it on the checkout. Under Settings, then General, both the WordPress Address and the Site Address should begin with https. If the browser shows a security warning, the certificate may have expired, which is renewed from your hosting control panel or by your host.
For shipping, go to WooCommerce, then Settings, then Shipping, then Shipping zones. Every place you deliver to needs a zone with at least one shipping method inside it, for example a United Kingdom zone with a flat rate for Royal Mail Tracked 48. A zone with no methods, or a customer address outside every zone, produces the message that no shipping options are available. Test with a real postcode, including one from Northern Ireland or the Highlands if you restrict by postcode.
To test for a conflict, deactivate plugins other than WooCommerce and your payment gateway, a few at a time, and retry checkout after each group. Discount, checkout field editor, shipping and script optimisation plugins are frequent causes. Also switch briefly to the Storefront theme to rule your theme out. A theme with old copies of WooCommerce templates is listed at the bottom of WooCommerce, then Status, under Templates. Use a staging site for this if your host offers one, since a live shop will look wrong while you test.
Place a test order
The most reliable test is a real order, because it uses the live gateway exactly as a customer does.
- Create a product priced at £1, set its Catalogue visibility to Hidden in the Publish box, and publish it.
- Open the product’s address in a private browser window and add it to the basket.
- Complete checkout with a real card, using a real UK address so that shipping is tested too.
- Confirm that the order appears under WooCommerce, then Orders, with a status of Processing, and that both the customer email and the new order email arrive.
- Refund the order from the order screen. Your payment provider may keep its processing fee.
- Delete the test product or set it to Draft.
Gateway test mode with the provider’s published test card numbers avoids real charges, but while it is switched on a live shop cannot take real payments, so it suits a staging site better.
Read the WooCommerce status report and logs
Go to WooCommerce, then Status. The System status tab highlights problems in red, such as outdated templates, an old PHP version or missing pages. The Logs tab holds a separate log for each source. Choose the log for your payment gateway, or the one for fatal errors, and look at the entries from the time of your failed test. Some gateways only write a log when logging or debug mode is enabled in their settings. The log usually contains the precise reason a payment was refused, and it is the first thing a developer or the gateway’s support team will ask for.
When to get help
Ask for help if the gateway log shows errors you cannot interpret, if checkout only fails for some customers or some devices, or if finding the conflict would mean switching off plugins on a live shop with no staging site to test on. Every hour of a broken checkout costs sales, so it is reasonable to hand this over early. WebFixed fixes this kind of problem for a fixed price agreed up front, with one-off fixes from £39 including VAT and nothing charged until you accept the quote.
Related questions
- Why does my WooCommerce checkout keep loading and never finish?
- An endless spinner normally means an error occurred in the background after Place order was clicked. A plugin conflict, a caching problem or a PHP fatal error is the usual cause, and the fatal errors log under WooCommerce, then Status, then Logs, often shows which.
- Why is the basket empty when customers reach checkout?
- The cart or checkout page is being cached, or the cookies WooCommerce uses to remember the basket are being stripped by a cache. Exclude the cart, checkout and account pages from every layer of caching, including the host and any content delivery network.
- Why are orders stuck on Pending payment?
- Pending payment means WooCommerce never heard back that the payment succeeded. The customer may have abandoned payment, or the gateway’s confirmation message, known as a webhook, is not reaching your site. Check the webhook settings in the gateway plugin and the provider’s dashboard.