🎉 Free WordPress fix for our first 50 sites — in exchange for an honest review. Claim a spot →

Errors

WordPress Critical Error on Checkout: Fix It Fast

Jul 2, 2026 · 7 min read · By the Mend engineering team

The "There has been a critical error on this website" message on a WooCommerce checkout page is a PHP fatal error — something crashed hard enough that WordPress caught it and replaced the page with a safe, generic notice. The good news: the cause is almost always one of four things, and you can isolate it without touching a line of code. This guide walks you through every fix in order, safest first.

What You're Actually Seeing

WordPress has shown this message instead of a white screen since version 5.2, when the fatal error protection system was introduced. When PHP throws a fatal error, WordPress intercepts it, logs the details, emails the admin address on file, and displays that generic notice to visitors so the site doesn't just go blank.

On a checkout page specifically, the symptoms usually look like one of these:

  • The checkout page loads its header and footer but shows the critical error notice in the content area.
  • The page loads normally until the customer clicks "Place Order," then the error appears.
  • The error appears only when a specific payment gateway is active.
  • The admin bar shows a "There has been a critical error" recovery link visible only to logged-in admins.

Visitors can't complete purchases. Every minute this runs, you're losing orders. Let's fix it.

Step 1: Read the Actual Error Before Touching Anything

The generic notice deliberately hides the technical details from the public, but those details are logged. Find them first — they'll tell you exactly what crashed and where.

Check the WordPress debug log

Open your site's wp-config.php (in the root of your WordPress install) and look for these lines. If they're not there, add them just above the line that reads /* That's all, stop editing! */:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

The log writes to /wp-content/debug.log. Open that file via FTP, SFTP, or your host's file manager. Scroll to the bottom and look for the most recent PHP Fatal error line. It will say something like:

PHP Fatal error: Uncaught Error: Call to undefined function wc_get_order()
in /wp-content/plugins/some-checkout-plugin/class-checkout.php on line 247

That one line tells you the plugin responsible, the file, and the line number. Note it — every fix below will make more sense with that information in hand.

Check the admin recovery email

WordPress emails the site administrator when a fatal error fires. Check the inbox for the email address in Settings → General → Administration Email Address. The email contains the same file and line number from the log.

Step 2: Identify and Isolate the Cause

Checkout-page critical errors almost always come from one of these four sources:

  1. A payment gateway plugin — Stripe, PayPal, Square, Authorize.net integrations are complex and break more often than any other WooCommerce extension.
  2. A WooCommerce add-on — checkout field editors, fee plugins, conditional shipping rules, order bump plugins.
  3. A PHP version mismatch — your host upgraded PHP and an older plugin uses deprecated or removed functions.
  4. A WooCommerce or WordPress core update that changed a function a plugin depended on.

The debug log you read in Step 1 will have already pointed at a specific plugin. If you can see the plugin name, jump straight to Step 3. If the log is empty or unclear, proceed through the following steps in order.

Step 3: Deactivate the Offending Plugin

Back up your database and files before making any changes. Most managed hosts (WP Engine, Kinsta, Flywheel, SiteGround, etc.) have a one-click backup in the dashboard. If yours doesn't, use a plugin like UpdraftPlus to create a backup now.

If the debug log named a specific plugin, deactivate only that plugin first:

  1. Go to Plugins → Installed Plugins in wp-admin.
  2. Find the plugin named in the error log.
  3. Click Deactivate.
  4. Load the checkout page in a fresh incognito/private window and attempt a test purchase.

If the checkout works, you've found the culprit. Check whether an update is available for that plugin — many fatal errors are fixed in the next release. If an update exists, install it, test again, then reactivate.

If you can't access wp-admin at all because the error is site-wide, deactivate via FTP: connect to your server, navigate to /wp-content/plugins/, and rename the offending plugin's folder (e.g., rename woocommerce-gateway-stripe to woocommerce-gateway-stripe-DISABLED). WordPress will automatically deactivate it.

Need to roll back to a previous version of the plugin that worked? See How to Roll Back a WordPress Plugin or Theme Update for the exact steps.

Step 4: Check Your PHP Version

PHP version mismatches are behind a large share of checkout-page fatal errors, especially after a host silently upgrades the server.

  1. Go to Tools → Site Health → Info → Server in wp-admin.
  2. Note the PHP version your server is running.
  3. Check the plugin's readme or changelog (on wordpress.org or the plugin developer's site) for its "Requires PHP" value.
  4. If your PHP version is higher than what the plugin was tested with, the plugin may be using functions that were removed in your PHP version.

The fix here is usually to update the plugin. If the plugin hasn't been updated in years and its developer is unresponsive, it's time to replace it with a maintained alternative. Do not downgrade PHP to match a broken plugin — older PHP versions have known security vulnerabilities.

Step 5: Check for a WooCommerce Version Conflict

WooCommerce publishes a WooCommerce HPOS (High-Performance Order Storage) compatibility requirement and regularly deprecates internal functions. If you updated WooCommerce recently and the error appeared immediately after, this is the most likely cause.

  • Go to WooCommerce → Status → System Status Report and look for any extensions flagged as incompatible.
  • Check the WooCommerce changelog for the version you're on — look for "deprecated" or "removed" function notes.
  • Cross-reference with the function name from your debug log.

If WooCommerce itself just updated and broke checkout, the safest short-term move is to roll it back one minor version while you wait for the conflicting extension to release a patch. The WordPress Site Broke After an Update guide covers exactly how to do that safely.

Step 6: Verify the Fix End-to-End

Once you've deactivated or updated the problem plugin:

  1. Open an incognito window (to avoid any cached session).
  2. Add a product to the cart.
  3. Proceed to checkout and complete a test order using your payment gateway's sandbox/test mode.
  4. Confirm the order appears in WooCommerce → Orders.
  5. Remove the debug constants from wp-config.php — or at minimum, ensure WP_DEBUG_DISPLAY stays false so errors never display to visitors.

How to Prevent This From Happening Again

The root cause of nearly every checkout critical error is an untested update. These habits eliminate most of them:

  • Test updates on a staging site first. Run updates on a clone of your live site, run a test purchase, then push to production. A staging workflow makes WooCommerce updates nearly risk-free.
  • Use automatic backups with quick restore. A backup you can restore in two minutes is the real safety net. Managed hosts and the Mend Care Plan both provide this.
  • Keep an eye on plugin compatibility notices. WooCommerce extensions often flag incompatibilities in their changelogs before the breaking update ships.
  • Monitor uptime and checkout functionality. A service that pings your checkout page regularly catches errors before customers do.

When to Call a Professional

If you've followed every step above and checkout is still broken, the error is likely in custom code — a bespoke theme, a custom plugin, or modified WooCommerce template files — and diagnosing it requires reading PHP and tracing function calls through a codebase. That's engineering work, not a settings change.

If you're losing orders right now and don't have time to debug PHP stack traces, Mend's Emergency Rescue gets a senior engineer on your site fast — most checkout fixes are resolved the same day, and every fix comes with a plain-English report of exactly what caused the error and what changed. If you're not sure whether you need help or just want a second opinion before touching anything else, start with a free Diagnosis — no credit card required, and it'll tell you exactly what's wrong and what fixing it will cost.


A critical error on checkout is serious, but it's almost always fixable within the hour once you know which plugin is crashing. The debug log is the fastest path to the answer — read it first, and the rest of the steps fall into place.

Frequently asked questions

Can customers still browse the site when the checkout has a critical error?

Yes. The critical error only affects the page where the PHP crash occurs. If the fatal error is isolated to the checkout page or fires only on order submission, the rest of your site — including product pages and the cart — will continue to load normally for visitors.

WordPress emailed me about a critical error but the site looks fine. Should I still investigate?

Yes. WordPress sends the recovery email as soon as a fatal error fires, even if the error was brief or only affected one visitor's session. Check the debug log for details — an error that fires intermittently will eventually become a consistent one, especially under checkout load.

Will deactivating a payment gateway mid-transaction cause problems for orders in progress?

Deactivating a gateway does not affect orders that have already been submitted and processed. It prevents new payment attempts through that gateway until you reactivate it. Customers with carts mid-way through checkout will not be able to complete via that gateway, so move quickly and restore service as soon as the fix is confirmed.

How do I know if HPOS is causing the conflict with my WooCommerce extensions?

Go to WooCommerce → Settings → Advanced → Features and look for the "High-Performance Order Storage" toggle. If it's enabled, check WooCommerce → Extensions → WooCommerce.com for a compatibility indicator next to each extension. WooCommerce also lists incompatible plugins in WooCommerce → Status under the "Active Plugins" section with a warning icon.