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-errorswith 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.
- Browser
- DNS
- HTTPS
- CDN or firewall
- Web server
- PHP
- WordPress (this error comes from here)
- Database and files
What causes it
The Checkout page is missing or not set up
CommonWooCommerce 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.
A cache is serving a stored copy of the checkout
CommonThe 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.
A plugin or the theme breaks the checkout's script
CommonThe 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.
PHP fails while the order is being saved
SometimesThe 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.
How to fix it
Set up the Checkout page
- Easy
- Low risk
- About 10 minutes
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.
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]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
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.
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.
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:
textwoocommerce_cart_hash woocommerce_items_in_cart wp_woocommerce_session_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
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/orwp-content/themes/shows which plugin or theme it belongs to.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.
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.
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
Step 1: Open the log
Go to WooCommerce, then Status, then Logs, and open the newest
fatal-errorslog. Find the entry made when your test order failed.Step 2: Read the path in it
The entry ends with the file that failed. The folder under
wp-content/plugins/orwp-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.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".
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.
- GuideWooCommerce database update required: what the notice means and how to finish it safely
- GuideWooCommerce filter URLs indexed in Google: ?orderby, ?filter_ and add-to-cart addresses, and what to do
- Cost guideWooCommerce maintenance cost: why a store costs more, and what the extra should buy
- GuideWooCommerce out of stock and discontinued products and SEO: leave, hide, delete or redirect
- GuideWooCommerce products not showing on Google: what to check, in order
- ResourceWooCommerce sale readiness checklist: Black Friday or any big sale

