Skip to content

WordPress fixes, security checks, and performance guides for site owners and builders.

Start with fixes
Fixes

How to Fix WooCommerce Checkout or Cart Failure

Fix WooCommerce cart and checkout failures by checking page assignments, caching, payment settings, field validation, logs, and plugin conflicts.

6 min read Last updated Jun 14, 2026

When a WooCommerce cart empties unexpectedly, prices disappear, checkout keeps loading, or the Place order button fails, test the same purchase in a private browser window. If the problem remains, check the Cart and Checkout page assignments and clear every cache before changing plugins or code.

Before troubleshooting, create a backup or work on a staging copy. Avoid placing real orders unless you can immediately refund or cancel them.

WooCommerce checkout not working: identify the failure

Reproduce the problem using the same product, address, shipping method, coupon, and payment gateway reported by the customer. Change one variable at a time.

Note where the process stops:

  • The product never reaches the cart.
  • The cart is empty after opening another page.
  • Product prices or totals are missing.
  • Checkout redirects back to the cart.
  • A required field is hidden or cannot be completed.
  • Shipping or payment options do not appear.
  • The Place order button does nothing.
  • An error appears after the order is submitted.

Check whether the problem affects logged-out customers, logged-in customers, or both. A failure limited to one browser or account can point to stale cookies, cached content, or customer-specific address data.

Check the Cart and Checkout page assignments

Open WooCommerce > Settings > Advanced and confirm that valid pages are assigned under Page setup for both Cart and Checkout. WooCommerce uses these assignments to direct customers through the purchase process, as explained in its Advanced settings documentation.

Edit each assigned page and confirm that it contains the appropriate WooCommerce Cart or Checkout block. Stores using the classic layout should instead have the corresponding shortcode:

[woocommerce_cart]
[woocommerce_checkout]

Do not put both the block and shortcode on the same page. Check that each page is published and publicly accessible.

If the pages were deleted or replaced, create new pages, add the correct blocks, publish them, and assign them in WooCommerce settings.

Exclude WooCommerce pages from caching

Cart and checkout content changes for each customer. Serving a cached copy can cause empty carts, stale totals, expired sessions, or incorrect customer details.

Clear each cache layer used by the store:

  • The WordPress caching or performance plugin
  • The hosting provider's page cache
  • A reverse proxy or CDN
  • The browser cache

Follow WooCommerce's caching configuration guidance and exclude the assigned Cart, Checkout, and My Account pages from full-page caching. Their usual paths are:

/cart/
/checkout/
/my-account/

Use the store's actual URLs if those pages have different slugs.

Cookie, session, database-cache, and endpoint exclusions vary by caching plugin, CDN, reverse proxy, and hosting platform. Check the documentation for each active cache layer rather than applying a configuration written for another platform. WooCommerce's guidance lists the cookies commonly used to maintain cart state and explains when _wc_session_ may need to be excluded from database caching.

Temporarily disable JavaScript delay, combination, and minification while testing. If checkout starts working, restore the options individually and use the performance tool's exclusion settings for the WooCommerce or payment-gateway scripts affected by that feature.

Clear the relevant caches and test again in a private browser window.

Check address and required-field validation

Checkout can appear broken when WooCommerce or an extension requires a field that is hidden, removed, or invalid for the selected country.

When checkout reports a missing state, billing address, phone number, or similar field:

  1. Retest with a standard billing and shipping address.
  2. Change the country and confirm that its state or region field appears when required.
  3. Temporarily remove custom code that changes checkout fields.
  4. Disable checkout-field editor, address validation, tax, and shipping extensions one at a time.
  5. Check whether the product's physical or virtual status is correct.

For a virtual product, edit the product and verify that Virtual is enabled. If it is also downloadable, confirm the Downloadable setting separately. Do not use custom code to suppress address fields until you know whether a payment, tax, or fraud-prevention service requires them.

Verify shipping and payment availability

If checkout loads but no usable shipping or payment method appears, test the configuration before investigating the theme.

For shipping:

  • Confirm that the customer's address matches a configured shipping zone.
  • Check that the zone contains an enabled shipping method.
  • Review minimum-order, product-class, weight, and destination restrictions.
  • Test without coupons or conditional-shipping extensions.

For payments:

  • Open WooCommerce > Settings > Payments and confirm that the gateway is enabled.
  • Verify that its account connection or API credentials are valid.
  • Check whether the gateway limits supported countries, currencies, products, or order totals.
  • Use the gateway's test mode if available.
  • Test a second enabled gateway.

If one gateway fails while another works, keep the working method available and investigate the affected gateway's settings and logs. Do not repeatedly submit live payments while diagnosing the problem.

Review WooCommerce logs

Open WooCommerce > Status > Logs and choose a recent log covering the time of the failed checkout. Look first for sources related to the payment gateway, fatal errors, webhooks, or WooCommerce itself.

Match the log timestamp to your test, but do not share complete logs publicly. They can contain customer details, transaction references, server information, or other sensitive data.

The next action depends on the error:

  • An authentication or API error points to the gateway connection or credentials.
  • A missing payment method points to gateway eligibility or configuration.
  • A PHP fatal error usually identifies the plugin, theme, or custom function that stopped checkout.
  • A timeout or blocked request may require help from the host, firewall provider, or payment vendor.

If WooCommerce logs contain nothing useful, WordPress can write PHP notices and errors to a debug file. Follow the official WordPress debugging instructions and avoid displaying errors to customers on a live store. Disable debugging after collecting the relevant entry.

Run a controlled conflict test

A recent plugin, theme, or WooCommerce update can expose incompatible checkout code. Perform this test on staging whenever possible.

WooCommerce's official conflict-testing procedure recommends creating a backup, switching to a default theme, and temporarily deactivating plugins.

Use this order:

  1. Record the active plugins and current theme.
  2. Switch to a default WordPress theme or Storefront.
  3. Leave WooCommerce and the affected payment or shipping extension active.
  4. Deactivate other plugins.
  5. Reproduce the same cart and checkout steps.
  6. Reactivate plugins one at a time, testing after each activation.

If changing the theme fixes the problem, inspect theme overrides, checkout templates, and custom code. If reactivating one plugin brings the failure back, leave it disabled and contact its vendor with the error, reproduction steps, and relevant sanitized log entry.

Must-use plugins and hosting drop-ins can also affect caching or requests even when ordinary plugins are disabled. Ask the host to inspect them if the failure survives a standard conflict test.

Check recent custom code and updates

Review changes made immediately before the failure began. Common triggers include snippets that modify checkout fields, prices, taxes, cart validation, shipping methods, or payment availability.

Temporarily remove the suspect snippet using the same tool or child theme where it was added. Do not edit the active parent theme because an update can overwrite the change.

If the problem started directly after an update, check whether the extension vendor has released a corrective update. Rolling back should be a temporary recovery measure, not the default fix. Restore the previous known-working version only from a trusted backup or official package, and test the rollback on staging before applying it to the live store.

After the fix, restore plugins and performance settings methodically. Clear caches once more, then complete a full checkout using a low-value test product and every payment method customers can currently select.

Editorial Staff

The BugWP editorial staff publishes practical WordPress guides for fixes, security, performance, hosting, Cloudflare, and plugin/theme recovery.