---
title: "How to fix a WooCommerce checkout that is not working"
url: https://wpministry.co/errors/woocommerce-checkout-not-working/
description: "When customers cannot place an order, the cause is usually on the site: the Checkout page, a cache, a broken script or a PHP error. Where it stops shows which."
lang: en-US
---

Skip to content

# How to fix a WooCommerce checkout that is not working

When customers cannot place an order, the cause is usually on the site itself. The Checkout page is not set up, a cache is serving a stored copy of it, a plugin or the theme breaks its script, or PHP fails as the order is saved. Where the order stops tells you which.

By

WP Ministry

Published

October 6, 2026

## In short

- Place a test order in a private window and note exactly where it stops. That one test separates the causes.
- If an order is created and only the payment fails, the checkout is working. The fault is at the payment step.
- Cart, Checkout and My account pages must never be served from a cache.
- Your products, past orders and customer accounts are not affected.

A checkout that is "not working" can mean a blank page, a button that does nothing, or an error after the customer presses it. This page covers the cases where the fault is on your site and no order is created. If orders are created and the payment is then refused or never confirmed, the checkout is doing its job: see WooCommerce payment gateway errors (https://wpministry.co/errors/woocommerce-payment-gateway-errors/) instead.

Your products, past orders and customer accounts are not affected. What you lose is each sale that fails while it lasts.

## Find where it stops

Place a test order yourself in a private browser window, without logging in. Many caches skip logged-in users, so a checkout can work for you and fail for customers. To test without a card, switch on an offline payment method such as cash on delivery under WooCommerce, then Settings, then Payments, and switch it off again afterwards.

Then look in four places.

- **WooCommerce, then Orders.** If your test made a new order, the checkout works. A status of "Pending payment" or "Failed" points at the payment step, not this page.
- **WooCommerce, then Status.** In the section named "WooCommerce pages", look at the Checkout row. "Page not set", "Page ID is set, but the page does not exist", or a line saying the page does not contain the checkout shortcode or block all lead to the first fix.
- **The message on the page.** "Sorry, your session has expired." and "We were unable to process your order, please try again." both mean WooCommerce rejected the form's security token. Go to the caching fix. A message that begins "There was an error processing your order." means the server's reply could not be read. Look at the log next.
- **WooCommerce, then Status, then Logs.** A log named `fatal-errors` with an entry at the time of your test means PHP failed. Go to the last fix.

If none of these shows anything and the button simply does nothing, a script is failing in the browser. Go to the conflict fix.

## Where it goes wrong

A page request passes through each of these in turn. This one comes from **a plugin**.

1. Browser
2. DNS
3. HTTPS
4. CDN or firewall
5. Web server
6. PHP
7. WordPress (this error comes from here)
8. Database and files

## What causes it

- ### The Checkout page is missing or not set up
  Common
  WooCommerce needs one published page, assigned as the Checkout page, that holds its Checkout block or checkout shortcode. A deleted page, a cleared setting or an edited page leaves it with nowhere to show the form.
  Fix: Set up the Checkout page
- ### A cache is serving a stored copy of the checkout
  Common
  The cart and checkout are different for every customer. A cache that stores them hands one visitor a page built for another, with a security token WooCommerce no longer accepts.
  Fix: Keep the cart and checkout out of every cache
- ### A plugin or the theme breaks the checkout's script
  Common
  The checkout form is run by JavaScript. An error in another plugin's script, an extension that does not support the Checkout block, or an out-of-date theme template can stop it before the order is sent.
  Fix: Find the plugin or theme that breaks the checkout
- ### PHP fails while the order is being saved
  Sometimes
  The order reaches the server and code in a plugin or the theme fails while handling it. The customer sees a general error, and the details go to a log.
  Fix: Find the PHP error behind the failure

## How to fix it

### Set up the Checkout page

- Easy
- Low risk
- About 10 minutes
1. #### Step 1: Check which page is assigned
   Go to WooCommerce, then Settings, then Advanced. Under "Page setup", "Checkout page" must name a published page. It must not be the same page as the cart or the account page. Save changes.
2. #### Step 2: Open that page in the editor
   It must contain the Checkout block. A store set up before the blocks existed may use the shortcode instead:
   If the page is empty, add the Checkout block and update the page.
   text Copy

   ```
   [woocommerce_checkout]
   ```

3. #### Step 3: If the page is gone, bring it back
   Look under Pages, then Trash, and restore it. If it is not there, go to WooCommerce, then Status, then Tools, find "Create default WooCommerce pages" and press **Create pages**. This creates the default pages that are missing and leaves the others alone.

### Keep the cart and checkout out of every cache

- Takes care
- Low risk
- About 20 minutes
1. #### Step 1: List every cache in front of the site
   There may be more than one: a caching plugin, a cache your host runs, and a content delivery network.
2. #### Step 2: Exclude three pages from each
   Cart, Checkout and My account must be left out of the cache. Many caching plugins do this on their own, but a changed page address or a reset setting can undo it.
3. #### Step 3: Leave WooCommerce's cookies alone
   If the cache has a setting for cookies, exclude these so a visitor with a cart is always given a fresh page:
   text Copy

   ```
   woocommerce_cart_hash
   woocommerce_items_in_cart
   wp_woocommerce_session_
   ```

4. #### Step 4: Empty every cache and test again
   Use a new private window. If you cannot see the settings of your host's cache, ask the host to confirm that those three pages are excluded.

### Find the plugin or theme that breaks the checkout

- Takes care
- Back up first
- About 30 minutes
1. #### Step 1: Look for an error in the browser
   On the checkout page, open the browser's developer tools (F12 in most browsers, or right-click the page and choose Inspect), choose Console, and try to place the order. A red error names a script file. A path through `wp-content/plugins/` or `wp-content/themes/` shows which plugin or theme it belongs to.
2. #### Step 2: Check that your extensions support the Checkout block
   Open the Checkout page in the editor and select the Checkout block. When an extension has declared that it does not support the block, a warning appears in the settings sidebar with a button to switch to the classic checkout.
3. #### Step 3: Check for outdated templates
   Under WooCommerce, then Status, the Templates section lists the theme files that replace WooCommerce's own and marks those that are out of date. An outdated checkout template is the theme author's to fix: update the theme, or ask them for a version that matches your WooCommerce.
4. #### Step 4: Narrow it down
   Update everything. Switch to a default WordPress theme and test. Then deactivate every plugin except WooCommerce and your payment gateway, test again, and reactivate them one at a time, testing after each, until the checkout breaks.

**To undo it:** Switch the theme back and reactivate the plugins.

### Find the PHP error behind the failure

- Takes care
- Low risk
- About 15 minutes
1. #### Step 1: Open the log
   Go to WooCommerce, then Status, then Logs, and open the newest `fatal-errors` log. Find the entry made when your test order failed.
2. #### Step 2: Read the path in it
   The entry ends with the file that failed. The folder under `wp-content/plugins/` or `wp-content/themes/` is the plugin or theme at fault. Switch it off as described for the white screen of death (https://wpministry.co/errors/white-screen-of-death/), then report the error to its author.
3. #### Step 3: If it says "Allowed memory size exhausted"
   The order needed more memory than PHP allows. See how to fix "Allowed memory size exhausted" (https://wpministry.co/errors/allowed-memory-size-exhausted/).
4. #### Step 4: If there is no such log
   Turn on WordPress's own debug log, as described for the 500 Internal Server Error (https://wpministry.co/errors/500-internal-server-error/), and repeat the test.

## When to get help

If the checkout fails on a copy of the site with a default theme and only WooCommerce active, the cause is in the server or in the store's data rather than in a plugin, and finding it takes access to the server's logs and the database. Get help sooner if customers report being charged for orders that do not exist.

## Common questions

The checkout works for me but not for customers. Why?

You are probably logged in. Test in a private window as a customer would. If it fails there, look at caching first.

A customer was charged but there is no order. What now?

Check your payment provider's dashboard for the charge before asking the customer to try again. Then look under WooCommerce, then Orders, for an order in "Pending payment". WooCommerce creates the order before it takes the payment, so the order is usually there and the confirmation never reached it. That is a payment fault: see WooCommerce payment gateway errors (https://wpministry.co/errors/woocommerce-payment-gateway-errors/).

Does the checkout need HTTPS?

In practice, yes. WooCommerce's documentation says most payment gateways require it. If browsers warn about your certificate, fix Your connection is not private (https://wpministry.co/errors/your-connection-is-not-private/) first.

## More on this subject

- WooCommerce stores: https://wpministry.co/topics/woocommerce/
- WordPress errors and troubleshooting: https://wpministry.co/topics/wordpress-troubleshooting/
- Guide WooCommerce variations and SEO: variation URLs, canonical links and the price in structured data: https://wpministry.co/blog/woocommerce-variations-seo/
- Glossary term Action Scheduler: https://wpministry.co/glossary/action-scheduler/
- Guide How to maintain a WooCommerce store: before every update, every week, every month and before a sale: https://wpministry.co/blog/woocommerce-maintenance-best-practices/
- Guide How to migrate from Shopify to WooCommerce: https://wpministry.co/blog/migrate-shopify-to-woocommerce/
- Guide How to set up WooCommerce email notifications: https://wpministry.co/blog/set-up-woocommerce-email-notifications/
- Guide How to speed up a WooCommerce store: https://wpministry.co/blog/speed-up-woocommerce/

## Would you rather we fixed it?

Emergency Fix is $99. Site down or checkout broken. Goes to the front of the queue. No fix, no fee. 30-day warranty.

More about this work: Emergency WordPress support (https://wpministry.co/services/emergency-support/)

May we measure how this site is used?

A yes notes the pages of this visit and loads Google Analytics. A no keeps and loads nothing. See the cookies page (https://wpministry.co/legal/cookies/).

If you say yes, we note the pages you look at during this visit and load Google Analytics. If you say no, nothing is kept and nothing is loaded. The site works the same either way. The cookies page (https://wpministry.co/legal/cookies/) has the details.

## Structured data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://wpministry.co/#organization",
      "name": "WP Ministry",
      "url": "https://wpministry.co/",
      "logo": "https://wpministry.co/brand/logo.png",
      "address": {
        "@type": "PostalAddress",
        "streetAddress": "1309 Coffeen Ave STE 1200",
        "addressLocality": "Sheridan",
        "addressRegion": "WY",
        "postalCode": "82801",
        "addressCountry": "US"
      },
      "sameAs": [
        "https://www.linkedin.com/company/wp-ministry/",
        "https://x.com/wpministryco",
        "https://www.instagram.com/wpministryco/",
        "https://www.facebook.com/wpministryco",
        "https://www.tiktok.com/@wpministryco",
        "https://www.pinterest.com/wpministryco/",
        "https://www.youtube.com/channel/UCOZRuAukk5QSTRPG6BaHl3Q"
      ]
    },
    {
      "@type": "WebSite",
      "@id": "https://wpministry.co/#website",
      "name": "WP Ministry",
      "url": "https://wpministry.co/",
      "inLanguage": "en-US",
      "publisher": {
        "@id": "https://wpministry.co/#organization"
      }
    },
    {
      "@type": "TechArticle",
      "@id": "https://wpministry.co/errors/woocommerce-checkout-not-working/#article",
      "headline": "How to fix a WooCommerce checkout that is not working",
      "description": "When customers cannot place an order, the cause is usually on the site: the Checkout page, a cache, a broken script or a PHP error. Where it stops shows which.",
      "url": "https://wpministry.co/errors/woocommerce-checkout-not-working/",
      "mainEntityOfPage": "https://wpministry.co/errors/woocommerce-checkout-not-working/",
      "inLanguage": "en-US",
      "image": "https://wpministry.co/og/errors/woocommerce-checkout-not-working.png",
      "author": {
        "@id": "https://wpministry.co/#organization"
      },
      "publisher": {
        "@id": "https://wpministry.co/#organization"
      },
      "datePublished": "2026-10-06T00:00:00.000Z",
      "dateModified": "2026-10-06T00:00:00.000Z"
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://wpministry.co/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Error fixes",
          "item": "https://wpministry.co/errors/"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "How to fix a WooCommerce checkout that is not working"
        }
      ]
    }
  ]
}
```