WordPress

WooCommerce Checkout Not Working? How to Find and Fix the Cause

Why WooCommerce checkout stops working, from payment gateways and plugin conflicts to caching and blocked requests, and how to fix it safely on a live store.

When WooCommerce checkout stops working, the cause is usually one of five things: the payment gateway, a plugin or theme conflict after an update, caching on the cart and checkout pages, a JavaScript error, or the server blocking a request the checkout needs. Start by working out exactly who is affected and when it started, then check the WooCommerce logs before changing anything. This guide walks through each cause, how to spot it, and how to fix it without making things worse on a live store.

What should you check first?

A few minutes of narrowing down saves hours of guessing. Before touching any settings, answer these questions:

  1. Is it every customer, or only some? Try a test order in a private browser window, on a phone using mobile data, and logged in as a customer. A problem that only appears for some people points to caching, a browser extension, or a specific payment method.
  2. Is it every payment method? If cash on delivery or bank transfer works but card payments fail, the problem is almost certainly the card gateway, not WooCommerce itself.
  3. Where exactly does it fail? The checkout page won’t load, the Place order button spins forever, an error appears, or the customer pays but the order never shows as paid. Each points to a different cause.
  4. What changed recently? Plugin, theme or WooCommerce updates, a new plugin, a hosting or PHP version change, new caching or CDN settings, or a change in the payment provider account.

Then open WooCommerce → Status → Logs. PHP fatal errors are recorded there under the fatal-errors source, and most payment gateway plugins write their own log when you turn on debug logging in the gateway’s settings. An error message with a date that matches the first failed order is the fastest clue you will get.

Which symptom points to which cause?

What customers seeMost likely causeWhere to look
Place order button spins and nothing happensJavaScript error, script optimization, or a blocked requestBrowser console, Network tab, caching and optimization settings
A payment method is missing from checkoutGateway not set up for the country or currency, or not compatible with the block checkoutGateway settings, checkout page type
Card is declined or an error appears after payingGateway keys, test mode, or a provider account issueGateway log, payment provider dashboard
Customer paid but the order stays on Pending paymentThe payment provider couldn’t notify your site (webhooks)Webhook settings in the provider dashboard, gateway log
Empty cart, or a session expired messageCart or checkout pages are being cachedCaching plugin, host cache, CDN rules
No shipping options for the customer’s addressShipping zones or methods don’t cover that addressWooCommerce → Settings → Shipping
Blank page or critical error on checkoutPHP fatal error from a plugin, theme or PHP version changefatal-errors log, server error log

What are the common causes, and how do you fix them?

1. Payment gateway problems

Gateways cause more checkout failures than anything else, because they depend on settings in two places: your WooCommerce store and your account with the payment provider. Check that:

  • The gateway is in live mode, not test or sandbox mode, and uses live API keys. Test keys left in place after launch are a common mistake.
  • The API keys haven’t been changed or revoked in the provider’s dashboard.
  • The provider account is active, with no verification request or restriction waiting for you. Providers usually explain these in their dashboard or by email, not on your website.
  • The gateway supports your store currency and the customer’s country.
  • Webhooks are set up and succeeding. Many gateways rely on the provider calling your site back to confirm a payment. If that call fails, the customer is charged but the order stays on Pending payment. The provider’s dashboard usually shows failed webhook deliveries and the error your site returned.

2. Block checkout and extension compatibility

Since WooCommerce 8.3, new stores use the Cart and Checkout blocks by default instead of the older shortcode-based checkout. Most popular gateways and extensions support the block checkout, but some older or less maintained ones don’t. When an extension isn’t compatible, its payment method or extra checkout fields can simply disappear.

Edit the checkout page to see which version you use. If an essential extension doesn’t support blocks yet, update it first. If there is no compatible version, you can switch the page back to the classic checkout by replacing the block with the [woocommerce_checkout] shortcode. Test the change on a staging copy before doing it live.

3. Plugin or theme conflicts after an update

If checkout broke straight after an update, that update is your first suspect. Two places help here:

  • WooCommerce → Status → System status lists theme files that override WooCommerce templates and flags any that are out of date. An outdated checkout template in your theme can break checkout after a WooCommerce update.
  • The Health Check & Troubleshooting plugin has a troubleshooting mode that disables plugins and switches to a default theme for your login session only, so customers keep seeing the normal site. Re-enable plugins one at a time until checkout breaks again, and you have found the conflict.

Once you know which plugin is involved, check its changelog and support forum for a fix, or roll back to the previous version until one is released. Rolling back is a short-term measure: keep a note to update again once the fix is out, because outdated plugins are a security risk.

4. Caching on the cart and checkout pages

Cart, checkout and My Account pages are different for every visitor, so they must never be served from a page cache. When they are, customers see someone else’s empty cart, form security checks fail, or they get a session expired message.

Most WordPress caching plugins exclude these pages automatically, so the culprit is often a second cache layer: a host-level cache, or a CDN rule such as Cloudflare’s “cache everything” applied to the whole site. Check every layer, and make sure all three pages, and requests carrying WooCommerce’s cart and session cookies, bypass the cache.

5. JavaScript errors and script optimization

The checkout depends heavily on JavaScript, especially for card fields and live updates to shipping and totals. If the Place order button does nothing, open your browser’s developer tools on the checkout page and look at the Console for red errors.

Performance settings that combine, defer or delay JavaScript are a frequent cause. They help on content pages, but they can load checkout or gateway scripts in the wrong order. Exclude the checkout page, and your gateway’s scripts, from these optimizations and test again.

6. Blocked requests and server problems

The checkout sends background requests to your own site while the customer fills in the form. The block checkout uses the WooCommerce Store API, under /wp-json/wc/store/. The classic checkout uses WooCommerce’s AJAX endpoints. If a security plugin, a firewall rule or the host blocks these requests, checkout fails even though the page loads normally. In the browser’s Network tab, these show up as failed requests, often with a 403 or 500 status.

Server-side problems to rule out include:

  • A PHP version change that an older plugin doesn’t support. This usually shows up in the fatal-errors log.
  • The PHP memory limit being reached during checkout.
  • An expired SSL certificate, or pages loading some content over plain HTTP. Browsers and gateways treat both as unsafe.
  • The server being unable to make outgoing connections to the payment provider.

7. Shipping and tax settings

Sometimes checkout works, but customers in some areas can’t complete it because no shipping method is offered. Check WooCommerce → Settings → Shipping: every address you sell to must fall into a shipping zone with at least one method. If your rates depend on weight or size, a product without a weight can also leave a customer with no options. These problems often appear after a new product range or a change to shipping zones, not after an update.

What if orders go through but confirmation emails don’t arrive?

This looks like a checkout problem to customers, but it’s an email delivery problem. If new orders appear under WooCommerce → Orders with the right status, checkout is working. Check that the order emails are enabled under WooCommerce → Settings → Emails, then look at how your site sends mail. Many hosts send email in a way that inboxes treat as untrustworthy. Sending through a proper SMTP or transactional email service, with SPF and DKIM set up for your domain, usually solves it.

How do you fix checkout safely on a live store?

A rushed fix on a live store can turn one problem into two, and every change on a store with live orders carries risk. Work in this order:

  1. Take a fresh backup of the files and the database before you change anything.
  2. Reproduce the problem on a staging copy if your host provides one, and test fixes there first.
  3. Change one thing at a time, so you know which change fixed it.
  4. Test a real order flow with the gateway in test mode on staging, then a low-value live order once the fix is live. Check that the order reaches the right status and the customer email arrives.
  5. Write down what was wrong and what changed, so it is quicker to fix if it ever happens again.

While checkout is broken, tell customers. A short notice on the site with another way to order, such as phone or email, keeps sales that would otherwise be lost.

How do you stop checkout breaking again?

Most checkout failures follow a change, so the best prevention is controlling how changes reach the live store:

  • Apply WooCommerce, gateway and plugin updates on a staging copy first, then repeat them on the live store.
  • Place a test order after every round of updates, not only when someone reports a problem.
  • Review the WooCommerce and gateway logs regularly, so new errors are spotted early.
  • Keep an eye on the payment provider’s dashboard for failed webhooks and account notices.
  • Check the outdated templates list in System status after each WooCommerce update.

No routine can guarantee every payment succeeds, because payments also depend on the customer’s bank and the payment provider. But a store whose checkout is tested after every update is far less likely to lose a weekend of orders without anyone noticing.

Frequently asked questions

Why are my WooCommerce orders stuck on Pending payment?

Pending payment means the order was created but WooCommerce never received confirmation that it was paid. Either the customer abandoned the payment, or the payment went through and the provider’s notification to your site failed. Check the payment provider’s dashboard for the transaction and for failed webhook deliveries.

Can I test checkout without charging a real card?

Yes. Most gateways have a test or sandbox mode with test card numbers. Use it on a staging copy rather than switching your live store into test mode. A 100% discount coupon is not a real test, because a free order skips the payment gateway entirely.

Is it safe to deactivate plugins on a live store to find a conflict?

Deactivating plugins on a live store affects every customer and can break other features, or lose settings for some plugins. Use a staging copy, or a troubleshooting mode that only applies to your own login session.

Should I switch from the block checkout back to the classic checkout?

Only if an extension you depend on doesn’t support the block checkout yet. The block checkout is where WooCommerce’s development is focused, so treat the classic checkout as a temporary fallback and check for compatible updates regularly.

Need your checkout fixed?

If your store is losing orders and you’d rather not debug it yourself, our Fix My Website service handles WooCommerce checkout problems. Tell us what’s happening, and we’ll find the cause and quote the fix before any work starts, backing up the site first. To stop it happening again, our e-commerce website management services cover updates tested on staging, scheduled test orders and log reviews. See the WooCommerce Care plans for what each plan includes. We already handle day-to-day WooCommerce and WordPress work for a restaurant ordering platform, and if you’re still building your catalog, our guide on how to add products in WooCommerce covers the basics.

Something on your site broken right now?

Tell us what is wrong. We find the cause and quote the fix before any work starts, and urgent problems such as a site that is down or a broken checkout are looked at first.