Checkout

How to fix WooCommerce checkout not working

WooCommerce checkout not working can mean a blank page, missing payment options or an order that never reaches its confirmation screen. Start by identifying which part fails. You can check page settings and narrow the cause from the dashboard without editing PHP or guessing at payment settings.

Time: 30-60 minutes Level: Intermediate
Neil McNaught, founder of BugShield and WordPress author
Written by
Written by
Updated
Updated

Establish where the purchase stopped

A shopper can reach the end of checkout without seeing a clear result, leaving you unsure whether to repair a page or resolve an existing order. Begin with that distinction. The checks below move from the customer's payment record to the page, its settings and a controlled test of the complete purchase.

Choose the next check from the evidence

For a checkout request refused with status 403, use the Cloudflare checkout investigation. Match the exact request before changing security rules.

Check whether the customer has already paid

Before asking anyone to try again, open WooCommerce > Orders and find their order. Read its notes, then compare the amount and transaction reference with your payment provider account. A failed confirmation screen does not prove that payment failed. If money was collected, resolve that existing order before creating another charge.

Write down the time, product, browser, payment method and exact message. Distinguish an empty cart from a checkout error: if products disappear before payment, start with our cart troubleshooting guide. If checkout displays correctly and only payment fails, use the payment gateway guide.

Reproduce the problem without changing the shop

Open a private browser window, add one in-stock product and enter a complete address in a region you serve. Stop before submitting payment. Check whether the address, shipping methods and totals appear. Repeat on a phone or a second browser. A problem limited to one device needs different investigation from a checkout that fails for everyone.

A message saying no shipping options are available needs the shipping checks. If payment options are missing, open WooCommerce > Settings > Payments. Confirm the intended method is enabled and its account connection is complete. Do not turn on test mode in the public shop to investigate a display problem.

WooCommerce example checkout with separate contact, shipping, payment and order summary areas
Use the separate address, shipping and payment areas to describe where your checkout stops. This official demonstration shows cash on delivery; your enabled methods and layout will differ. Image unchanged. Credit: WooCommerce contributors, GPL-2.0-or-later.

Confirm that WooCommerce is using the right checkout page

Visit WooCommerce > Settings > Advanced > Page setup and note the selected Checkout page. Open that page under Pages > All Pages. It must be published and contain checkout functionality, rather than just a heading or a link. Select the correct existing page in the settings if the assignment is wrong, save, then repeat your browser check.

In the WordPress editor, a Checkout block identifies block checkout; a Shortcode block containing [woocommerce_checkout] identifies classic checkout. Elementor can supply its own checkout widget. Check your gateway and checkout extension documentation for support for the format you actually use. Do not place a block, shortcode and builder checkout together on the same page.

If a recent redesign introduced the failure, restore that page's previous working revision on a staging copy first. WooCommerce explains block and classic checkout compatibility. Changing formats is a considered compatibility fix, not a required step for every checkout problem.

Check caching and secure page loading

A page cache saves a ready-made copy of a page. Checkout needs each shopper's current basket, so your cache must bypass it. Open your caching plugin's exclusions or never-cache settings and compare them with your actual cart, checkout and account addresses. Some products already add these exclusions. If hosting or a CDN also caches pages, ask the host to verify those rules too.

After correcting exclusions, follow our cache-clearing guide and start a fresh private-window basket. If the error began after enabling script delay, defer or combine settings, record them and disable that change on staging. Retest before changing anything else. A working checkout identifies a setting to exclude or adjust, rather than a reason to remove caching permanently.

Check that the checkout address begins with HTTPS and that the browser reports no certificate warning. For insecure-resource warnings or missing embedded payment fields, use the mixed-content guide. Do not change the domain or certificate settings without establishing which warning is present.

Test conflicts on a separate copy

Create a protected staging site and disable its real customer emails and live payment connections before payment tests. Record the active theme and plugins. Keep WooCommerce, the affected gateway and every extension needed for the test product active, such as Subscriptions for a subscription order.

Under Plugins > Installed Plugins, deactivate one unrelated plugin, repeat the same failing action, then restore it if nothing changes. Start with recent checkout, optimisation or consent changes. Test a standard WooCommerce-compatible theme on the copy if the plugins do not explain it. Restore the original theme afterwards. Follow WooCommerce's conflict-testing guidance for a broader isolation test.

If checkout still fails, open WooCommerce > Status > Logs. Select the fatal-errors or gateway log for the date of the failure and open it, then find entries at the recorded time. Share the relevant error privately with support, with customer details and secrets removed. An empty log does not establish that checkout is healthy.

Verify the repaired purchase journey

On staging, use the gateway's documented test mode and test payment details to place an order. Confirm the total, shipping, confirmation page and order record agree. Test a guest checkout and a signed-in customer if both are supported. Recheck the original failing product, device and payment method.

Apply only the confirmed fix to the live shop, preserving new orders and customers rather than replacing its database with staging. Verify the live payment connection and repeat the journey with one authorised real purchase if needed. Reconcile that payment before refunding the test order through the supported workflow.

Get help with the next step

If you cannot safely test a busy shop or the results are unclear, ask BugShield to investigate checkout. The failing step, affected order reference and checks already completed give us a useful starting point.

Questions answered

How to fix WooCommerce checkout not working FAQs

Why does checkout keep spinning after Place order?

The browser is waiting for an update or payment result that has not completed. Check the order and payment provider before retrying. The spinner alone does not identify a plugin conflict, a blocked request or a successful payment with a failed confirmation page.

Why can I order as an administrator but guests cannot?

Administrators and guests can receive different cached pages, account requirements and cookie behaviour. Test a fresh private window with the same product and address, then inspect guest checkout settings and cache exclusions.

Should I disable every plugin?

Keep WooCommerce, the gateway and required product extensions active. Run isolation on staging, changing one component at a time. Disabling WooCommerce removes the checkout you need to test.

Can I switch from Checkout blocks to a shortcode?

Yes, where an extension requires classic checkout, but test the replacement on staging and check all payment, shipping and custom-field behaviour. Keep Cart and Checkout on matching formats, use one implementation per page and retain the previous page revisions.

Is a successful test-mode order enough?

It verifies the test connection and the tested journey. Live account credentials and payment notifications are separate, so check their connection status and verify an authorised live transaction when needed.

Need a hand with your WordPress site?

Tell us what happened and where you got stuck. A BugShield developer can help you work out the next step and confirm a price for the fix.

Explore help with this issue

Accessibility settings

Adjust how this site looks and moves. Your choices are saved in this browser.