WooCommerce Checkout Not Working: How to Find What Actually Broke
The checkout looked fine. The button was there. The form accepted the card. Then nothing. No confirmation email, no order in the dashboard, no error on the screen.
This is the failure mode that costs the most time: not a crash, not an obvious error, just silence. The system appeared to work. It didn’t.
If your WooCommerce checkout has stopped processing orders, the cause is almost never where you think it is. This is the diagnostic sequence that finds it.
Start here before you change anything
Before you touch a plugin, disable a theme, or call your developer, do one thing: reproduce the failure with WP_DEBUG enabled. Go to your wp-config.php file and set these two lines:
define( ‘WP_DEBUG’, true );
define( ‘WP_DEBUG_LOG’, true );
This writes errors to a file at /wp-content/debug.log. You are not fixing anything yet. You are collecting evidence. Every step you take before you have the log is a guess. The log turns guesses into a diagnosis.
Layer 1: The payment gateway
The most common cause of a broken WooCommerce checkout is a payment gateway that stopped communicating. Stripe, PayPal, and Square all have status pages. Check them first. A gateway outage is not something you can fix, and knowing it is the cause saves you hours of looking elsewhere.
If the gateway status is green, go into WooCommerce > Settings > Payments and switch your active gateway to the built-in “Check payments” option temporarily. Run a test order. If the order goes through with check payments and fails with your real gateway, the problem is in the gateway configuration, not in your site.
Common gateway causes: expired API keys, mismatched live/test mode settings, a plugin update that reset the gateway credentials, a webhook URL that changed when you moved to a new host.
Layer 2: The plugin conflict
WooCommerce checkout failures spike after plugin updates. If yours broke within 24 hours of an update, this is the most likely culprit.
Go to Plugins and deactivate everything except WooCommerce and your theme. Run a test order. If it works, you have a plugin conflict. Reactivate plugins one at a time, testing after each one, until the checkout breaks again. The last plugin you activated is the conflict.
The plugins most frequently in conflict with WooCommerce checkout: caching plugins (they intercept the checkout POST request), security plugins (they block REST API calls that WooCommerce needs), and optimization plugins (they break JavaScript on the checkout page).
Layer 3: The JavaScript error
WooCommerce checkout relies heavily on JavaScript. If something on your page is breaking the JS, the checkout form can appear perfectly normal and do nothing when submitted.
Open your browser, go to the checkout page, and press F12 to open developer tools. Click the Console tab. Reload the page. Look for red error lines. Any JavaScript error on the checkout page is a lead worth following.
Common JS causes: a plugin loading a script that conflicts with jQuery, a custom CSS or JS snippet in your theme that breaks the checkout event listener, a caching plugin that bundled incompatible scripts together.
Layer 4: The server error
If the JavaScript console is clean, the failure is happening on the server side. This is where your debug log becomes the main evidence.
Open /wp-content/debug.log. Look at the entries from the time you attempted the failing checkout. You are looking for PHP fatal errors, PHP warnings involving WooCommerce files, and any error mentioning wc-ajax, checkout, or payment.
If you see an error you do not understand, copy the exact error text and the file path it mentions. That is what your developer needs. Not a description of what happened on screen. The exact PHP error and the file it came from.
Layer 5: The database
If the log is clean and orders are still not saving, the failure is in the database write layer. This is less common but it happens: the checkout process completes but the order record never writes.
Check WooCommerce > Orders. If you see orders with a “Pending payment” status that never resolve, the checkout is firing but the order is failing to update. This usually means a database table is corrupted or a hook that processes the order completion is silently failing.
Go to WooCommerce > Status > Tools and run “Clear transients” and “Clear customer sessions.” Then run a test order again. If that does not resolve it, check whether your database user has full write permissions on the WordPress database.
What to hand off to your developer
If you have worked through these layers and the checkout is still broken, you have everything your developer needs to fix it on the first attempt:
- The contents of /wp-content/debug.log from the time of the failed checkout
- The JavaScript console errors, if any
- Which gateway is active and whether the failure happens with check payments too
- Which plugins are active (WooCommerce > Status > System Status has a full list)
- Whether the failure started after a specific update or change
The reason most developer handoffs take multiple rounds is that the developer is working from a description of what you saw. What they need is the evidence of what the system did. The log is that evidence.
If you are building with AI assistance and hitting this failure, the same principle applies: give your AI the exact error text, not a description of the symptom. “The checkout is broken” produces a guess. “PHP Fatal error: Call to undefined function wc_get_order() in /wp-content/plugins/my-plugin/checkout.php on line 47” produces a fix.
Loupely captures this evidence automatically. One click captures the browser state and server logs together, produces a plain-language diagnosis, and formats the output for immediate developer or AI handoff. If you are spending hours on WooCommerce failures, that is what it is built for: useloupely.com
