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

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 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
    [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
    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, 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".

  4. Step 4: If there is no such log

    Turn on WordPress's own debug log, as described for the 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.

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 first.

More on this subject

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. It starts with a free diagnosis.