WooCommerceCheckoutUpdated for 2026

WooCommerce Checkout Not Working

IN
Reviewed by the Instant Nerds Team|Last updated: June 2026
Quick summary

A broken WooCommerce checkout is lost revenue by the hour, so the first job is to find which of a few distinct failures you have. Payment methods missing usually means a disabled or unsupported gateway, no full https, or a payment plugin that does not support the Checkout block. A Place Order button that does nothing is almost always a JavaScript conflict or an invisible CSS overlay. A checkout that breaks right after enabling PayPal is a known 2026 plugin issue. And a payment that gets rejected with a valid card is a gateway configuration problem, not a front-end bug. This page separates them, gives you the exact diagnostic for each, and shows the one setting, the block versus classic shortcode, that decides which plugins work at all.

Key facts at a glance

WooCommerce checkout failures in 2026

Last updated

The setting that decides everything
Whether your store uses the Checkout block or the classic [woocommerce_checkout] shortcode. The Cart and Checkout blocks became the default for new stores from WooCommerce 8.3 in November 2023. Many older payment and field plugins only support the shortcode.
Why payment methods vanish
A gateway is disabled, your store currency or country is not supported by it, the site is not fully on https, or the plugin has no Checkout block support. On Stripe, WooCommerce also caches the enabled-methods list and refreshes it only about every 10 minutes.
Why Place Order does nothing
A JavaScript conflict from another plugin or the theme breaks the checkout script before it can submit, or a CSS overlay with a high z-index sits invisibly on top of the button. The browser console, opened with F12, names the failing file.
Known 2026 PayPal issue
A May 2026 WooCommerce PayPal Payments issue breaks the Blocks checkout when PayPal is enabled. Reproduced on plugin 4.0.4, WooCommerce 10.7.0, WordPress 6.9.4. Disable PayPal in the plugin or use the classic checkout until it is patched.
Button does nothing vs payment rejected
Two different problems. A dead button is a front-end conflict. A Payment could not be processed message with a valid card is a gateway configuration issue: test vs live keys, unsupported currency, failed 3D Secure, or a missing webhook.
Distinctive trap
A checkout can look completely healthy and still take no orders. The page renders, the fields are there, the button is visible, yet a console error or a silently unregistered payment method means nothing actually submits. Because the page is not blank, owners assume the front end is fine and waste hours on server logs. The browser console and a payment-method check are the fastest way to see the real failure.

Source: the WooCommerce Stripe troubleshooting documentation, the WooCommerce store-editing documentation on the Cart and Checkout blocks, the WooCommerce PayPal Payments GitHub issue tracker, the WooCommerce block payment-method integration developer docs, and our hands-on store repairs. Get a quote in 60 seconds →

How WooCommerce checkout works in 2026

There are now two checkouts in WooCommerce, and which one your store uses changes everything about diagnosis. The classic checkout is a page containing the [woocommerce_checkout] shortcode, the experience WooCommerce shipped for years. The newer Cart and Checkout blocks are a rebuilt, React-based experience that became the default for new stores from WooCommerce 8.3 in November 2023. The block is faster and smoother, and it is where WooCommerce is putting future development, including modern express-payment layouts.

The catch is compatibility. A payment gateway, a checkout-field plugin, or a conditional-logic plugin written for the classic shortcode does not automatically work on the block. It has to be specifically updated to register through the block payment-method and checkout APIs. Many plugins have done that. Many older or abandoned ones have not. When a non-block plugin runs on a block checkout, the usual result is not a loud error. It is a payment method that quietly never appears, or a custom field that does not save, or a place-order step that stalls. That silence is why so many checkout problems get misdiagnosed.

Before anything else, find out which checkout you have
  • Block: editing the Checkout page shows a single Checkout block with a settings sidebar.
  • Classic: editing the Checkout page shows the text [woocommerce_checkout].
  • Why it matters: the same plugin can work perfectly on one and silently fail on the other. This single fact narrows most checkout bugs in seconds.

Which symptom matches yours

Find the row that matches what shoppers see. Each one points to a different root cause and a different fix path.

SymptomMost likely root cause
The checkout page says No payment methods are available, or the payment section is simply emptyThe gateway is disabled, your store currency or country is not supported by it, or your store is not fully on https. On Stripe, the enabled-methods cache can also lag by up to 10 minutes after a change.
You switched to the Checkout block and a payment method or custom field that used to be there is goneThe plugin only registers itself for the classic shortcode checkout and has no block support. On the block it silently does not appear. Update it to a block-compatible version or revert to the classic checkout.
Clicking Place Order does nothing. No spinner, no error, no redirectA JavaScript conflict from a plugin or theme is breaking the checkout script, or a CSS overlay with a high z-index is sitting on top of the button. Open the browser console with F12 to find the failing file.
Checkout broke right after enabling PayPal through the WooCommerce PayPal Payments pluginA confirmed May 2026 issue where the PayPal Payments plugin breaks the Blocks checkout when PayPal is enabled. Disable PayPal in the plugin, or move to the classic checkout, until a plugin update lands.
The order submits but returns Payment could not be processed even with a valid cardA gateway-side rejection, not a front-end bug. Test vs live key mismatch, an unsupported currency on the account, a failed 3D Secure step, or a webhook that never arrived. Enable gateway logging and read the decline reason.
Checkout fails for some visitors or some devices but works for othersA caching layer or CDN serving a stale checkout bundle, a browser extension blocking the payment script, or a security plugin challenging some sessions with a CAPTCHA. Test in incognito with extensions off and clear every cache including the CDN.
The checkout page is blank, or shows a critical error, after a plugin or WordPress updateA fatal error on the checkout template, often a plugin not compatible with your WooCommerce or PHP version. Check the recovery email and wp-content/debug.log for the file path, then update or deactivate that plugin.

The five root causes

Nearly every broken WooCommerce checkout traces to one of these five. Identifying which one you are in is most of the work.

1. A plugin that does not support the Checkout block

This is the defining checkout problem of the block era. A payment gateway, a custom-fields plugin, or a conditional shipping or discount plugin was built for the classic shortcode and has no block integration. On the block it does not throw an error, it simply does not register, so its payment method is absent or its field never appears and the order will not complete. The tell is that the same store works perfectly the moment you transform the page back to the classic shortcode. The clean fix is to update the plugin to a version that declares block support. The fast fix, when no such version exists, is to revert both the Cart and the Checkout to the classic shortcode so the plugin works again.

2. A gateway disabled, unsupported, or blocked by missing https

When the checkout reports no payment methods available, the gateway is usually disabled, or it is enabled but your store currency or country is outside what that gateway supports, in which case WooCommerce hides it without comment. Payment gateways also require a secure connection. WooCommerce recommends running the entire store on https, not just the checkout page, and offers a Force SSL setting for that. On Stripe there is one more wrinkle: the checkout caches the list of enabled payment methods and refreshes it only about every 10 minutes, so a method you just turned on can be missing until the cache clears or you delete the related transients.

3. A JavaScript conflict or CSS overlay killing the Place Order button

If the button is visible but clicking it does nothing, the checkout JavaScript is not running to completion. Some other plugin or theme script threw an error first, and that error halts the WooCommerce submit handler. The browser console, opened with F12 then the Console tab, almost always shows a red error naming the file at fault, which points straight to the plugin or theme. The quieter variant is a CSS overlay: an element with a high z-index covering the button so clicks never reach it. Inspect the button area to confirm. The JavaScript case is fixed by updating or disabling the conflicting plugin, the overlay case by a targeted CSS correction.

4. The 2026 WooCommerce PayPal Payments block issue

A specific, confirmed issue reported on the WooCommerce PayPal Payments GitHub tracker in May 2026 documents that enabling PayPal through the plugin breaks the Blocks checkout. The page loads, but the checkout flow does not behave correctly, and disabling PayPal in the plugin settings, or deactivating the plugin entirely, restores it. It was reproduced on PayPal Payments 4.0.4, WooCommerce 10.7.0, and WordPress 6.9.4, and the reports tie it to the plugin block integration and its fraud-protection and reCAPTCHA layer. Confusingly, the console shows reCAPTCHA tokens generating successfully even as checkout fails. Until a fixed plugin version ships, the workable options are to disable PayPal and run another gateway, or move the store to the classic shortcode checkout where the plugin behaves.

5. A gateway-side rejection from misconfiguration

When the order submits but comes back with a message like Payment could not be processed on a card you know is good, the front end is fine and the gateway declined. The usual causes are API keys still in test mode on a live store, or live keys pasted into the test field, a currency on the order that the gateway account is not approved to charge, a 3D Secure authentication step the bank required that did not complete, or a webhook from the gateway that never reached the site, leaving the order unpaid even after the charge. Every major gateway has a logging option. Turn it on, place one order, and read the log. It records the precise decline reason, which is far more useful than the message the shopper sees.

DIY vs hand it off

Some checkout fixes are a setting change. Others are a plugin conflict hunt or a gateway integration repair on a live, revenue-critical page. If the left column matches you can likely do this yourself. If the right column matches, get help before testing on production.

Realistic on your own

  • The gateway was simply disabled, or your store was not fully on https
  • The console names one plugin, and an update for it is available
  • You can read the browser console and follow a conflict test
  • Reverting to the classic checkout is acceptable for your store
  • You have a staging site and a recent backup to test on
  • It is the known PayPal issue and disabling PayPal is an acceptable stopgap

Hand it off, save the revenue

  • The store is taking no orders right now and every hour is lost sales
  • Payments are being rejected and you cannot read the gateway logs
  • Multiple plugins conflict and you cannot tell which to disable first
  • You depend on a plugin with no block support and cannot lose its function
  • Webhooks, 3D Secure, or multi-currency are involved
  • You are not comfortable disabling plugins or editing code on a live store

How to diagnose the failure

Run these in order. The first two narrow almost every case, and you can stop as soon as the cause is clear.

1
Identify block or classic checkout

Edit the Checkout page. A single Checkout block with a settings sidebar means you are on the block. The text [woocommerce_checkout] means classic. Write this down. It determines which of the causes below are even possible, because block-incompatible plugins only fail on the block.

2
Open the browser console while you check out

On the live checkout, press F12, open the Console tab, reload, and attempt an order. A red error that names a file under /wp-content/plugins/ or /themes/ points straight at the conflicting plugin or theme. No console errors but no payment methods points instead at gateway or block-compatibility causes.

3
Confirm the gateway, currency, and https

In WooCommerce then Settings then Payments, confirm the gateway is enabled. Confirm your store currency and base country are supported by that gateway. Confirm the whole site loads on https, not just checkout, and enable Force SSL if needed. For Stripe, if you just changed settings, wait for or clear the payment-method cache before judging.

4
Run a conflict test

On staging, switch to a default theme such as Storefront and retest checkout. If it works, the theme is the cause. If not, deactivate plugins in groups, or all but WooCommerce and the gateway, then re-enable one at a time, testing checkout after each. The plugin that reintroduces the failure is your culprit.

5
Test the block versus classic hypothesis directly

If a payment method or field is missing on the block, transform the Cart and Checkout to the classic shortcode on staging and retest. If the missing item returns, you have confirmed a block-compatibility gap in that plugin. Decide whether to update the plugin or stay on the classic checkout.

6
Read the gateway log for rejected payments

If orders submit but get declined, enable the logging option in the gateway settings, place one test order, then open WooCommerce then Status then Logs and read the gateway entry. It records the exact reason: test or live key mismatch, unsupported currency, failed authentication, or a webhook that never arrived.

How to fix it

Each branch stands alone. Pick the one your diagnosis pointed to.

If payment methods are missing

Work through the requirements in order. Confirm the gateway is enabled in WooCommerce then Settings then Payments. Confirm your store currency and base country are supported by that gateway. Confirm the whole site runs on https and enable Force SSL if not.

For Stripe specifically, clear the cached payment-method list if you recently changed settings, by re-saving the payment settings page or deleting the related transients, since the checkout only refreshes that list about every 10 minutes. If the method still does not show on a block checkout, you are likely looking at a block-compatibility gap, covered below.

If a plugin does not support the Checkout block

First, update the plugin. Most actively maintained gateways and checkout-field plugins shipped block-compatible versions through 2024 and 2025, and an update often resolves it outright.

If no block-compatible version exists, you have two choices. Replace the plugin with a maintained alternative that supports the block, or revert to the classic checkout where the plugin already works. To revert, edit the Cart and the Checkout pages and use the transform option in the block toolbar to switch each to its classic shortcode counterpart. Revert both together so they match.

# Classic checkout page content
[woocommerce_checkout]

# Classic cart page content
[woocommerce_cart]

If the Place Order button does nothing

Open the console with F12 and read the red error. It names the file, which names the plugin or theme. Update that plugin, or deactivate it and test, to confirm. If the console is clean but the click still does nothing, inspect the button for a CSS overlay sitting on top of it and correct the offending element. A high z-index on a full-width element is the usual culprit.

If you cannot find the conflict quickly, run the conflict test from the diagnosis section on staging: default theme, then plugins re-enabled one at a time. As a maintenance step, WooCommerce then Status then Tools also offers an Update database action that resolves some stale-data checkout glitches after upgrades.

If enabling PayPal broke the block checkout

This is the known 2026 WooCommerce PayPal Payments issue. Until a fixed plugin version is released, you have two practical paths. Disable PayPal inside the plugin settings and run a different gateway on the block checkout, which keeps the rest of the block experience intact. Or revert to the classic shortcode checkout, where the PayPal Payments plugin behaves correctly.

Check the plugin changelog before settling on a workaround, since a patched release may already be available by the time you read this. If it is, update first and retest the block checkout before changing anything else.

If payments are being rejected at the gateway

Read the gateway log first, then fix the specific cause it names. Common ones and their fixes:

  • Test or live key mismatch: make sure live API keys are in the live fields and test mode is off on a live store.
  • Unsupported currency: confirm your gateway account is approved to charge the store currency, or add a supported currency.
  • Failed 3D Secure: ensure the authentication step is enabled and not blocked by a script or popup blocker.
  • Missing webhook: re-register the gateway webhook endpoint so paid orders update from pending to processing.

Store taking no orders right now, or not sure which branch applies?

Let us fix it in 2 hours →

A real checkout debug session

A composite from the WooCommerce checkout repairs we run most weeks, with identifying details removed.

Scenario

A homeware store updated to the new Checkout block to get the cleaner one-page layout. The page looked great. Then orders stopped. The card fields rendered, the Place Order button was right there, but shoppers reported that clicking it did nothing, and the store had not recorded a sale in two days. The owner had spent a day in the host server logs finding nothing, because the failure was entirely in the browser.

Diagnosis

We opened the checkout, pressed F12, and reloaded. The console threw a red error from a long-installed conditional-fields plugin that hooked the classic checkout and had no block support. On the block it broke the submit handler outright. A second look at WooCommerce then Settings then Payments showed the store currency had also been switched to one the gateway did not support, so even past the script error, no method would have charged.

Resolution

The conditional-fields plugin had no maintained block version, and the store only used it for one optional gift-message field. We replaced it with the block-native field API, which carried the gift-message field cleanly onto the block checkout. We set the store currency back to the supported one, confirmed the whole site was on https, and placed a live test order end to end. The console was clean, the order completed, and the gateway recorded the charge.

Total elapsed
Taking orders again well inside the 2-hour window, after the owner had lost two days of sales to a problem that was never in the server logs.

When to stop and hand it off

Four situations where DIY costs more than help. First, the store is taking no orders right now and every hour is lost revenue, so speed matters more than learning the WooCommerce internals. Second, payments are being rejected at the gateway and the logs point at webhooks, 3D Secure, or multi-currency, which are easy to make worse. Third, several plugins conflict at once and you cannot tell which to disable without taking the store down further. Fourth, you depend on a plugin with no block support and cannot afford to lose what it does, so the fix is a migration rather than a toggle. We diagnose from the browser and the gateway logs, fix or replace the offending plugin, and get the store charging cards again. Flat $49 to $149, done in two hours when scope fits, money back if we cannot.

Get a quote in 60 seconds

WooCommerce checkout FAQ

My checkout shows no payment methods available. Where did Stripe and PayPal go?

This is almost always one of three things. First, the gateway is not actually enabled, or it is enabled but your store currency or country is not one it supports, in which case WooCommerce hides it silently. Second, you switched to the Checkout block and your payment plugin only registers itself for the classic shortcode checkout, so it never appears on the block. Third, on Stripe specifically, WooCommerce caches the list of enabled payment methods and only refreshes it about every 10 minutes, so a method you just enabled can be missing until the cache clears. Start by confirming the gateway is enabled, your store currency is supported, and your whole site runs on https. Then check whether you are on the block or the classic checkout, because that single fact changes which plugins work.

I click Place Order and nothing happens. No error, no redirect. Why?

When the Place Order button does nothing at all, the cause is nearly always a JavaScript conflict on the checkout page. Some plugin or theme script is throwing an error before WooCommerce can submit the form, so the click is dead. Open your browser developer tools with F12, go to the Console tab, reload checkout, and click Place Order. A red error message will usually name the exact file, which tells you the plugin or theme at fault. A second, sneakier cause is a CSS overlay. A full-width element with a high z-index can sit invisibly on top of the button, so your clicks land on the overlay, not the button. Inspect the button area to rule that out. The fix for the JavaScript case is to find and update or disable the conflicting plugin. The fix for the overlay is a targeted CSS correction.

How do I tell whether I am on the WooCommerce Checkout block or the classic shortcode?

Edit the Checkout page in the WordPress editor. If you see a single block called Checkout with a settings panel on the right, you are on the block. If you see a short text snippet that reads [woocommerce_checkout], you are on the classic shortcode. This matters more than almost anything else, because the Cart and Checkout blocks became the default for new stores from WooCommerce 8.3 in November 2023, but many older payment gateways, checkout-field plugins, and conditional-logic plugins were built for the classic shortcode and have not been updated for blocks. On the block they either silently do nothing or break the payment step. If a plugin you depend on is not block compatible, you can transform the block back to the classic shortcode from the block toolbar, and you must revert both the Cart and the Checkout together so they match.

My checkout broke right after I enabled PayPal. Is that a known issue?

Yes. A confirmed issue reported on the WooCommerce PayPal Payments GitHub tracker in May 2026 documents that enabling PayPal through the WooCommerce PayPal Payments plugin breaks the Blocks checkout. The page loads but the checkout flow does not behave correctly, and disabling PayPal in the plugin settings or deactivating the plugin restores it. It was reproduced on PayPal Payments 4.0.4, WooCommerce 10.7.0, and WordPress 6.9.4, and appears connected to the plugin block integration and its fraud-protection layer. Browser console logs show reCAPTCHA tokens generating successfully even though checkout still fails, which is why it looks so confusing. While you wait for a plugin update, the practical options are to disable PayPal in the plugin and use a different gateway, or to move the store to the classic shortcode checkout where the plugin behaves.

Should I just switch back to the classic checkout to make everything work?

It is a legitimate fix, not a hack, and it is often the fastest way to get a store taking orders again when a critical plugin is not block compatible. The classic shortcode checkout is still fully supported. The trade-off is that the Cart and Checkout blocks are where WooCommerce is investing future development, they offer a smoother one-page experience, and several modern express-payment layouts only exist on the block. The right call depends on which plugins you cannot live without. If a plugin you rely on has a block-compatible version available, update it and stay on the block. If it is abandoned with no block support, either replace it with a maintained alternative or revert to the classic checkout. Reverting both Cart and Checkout to the shortcode is a two-minute change you can undo later.

The checkout works on my phone but not in my office, or vice versa. What causes that?

Intermittent or device-specific checkout failures usually point to one of three things. A caching layer, either a caching plugin or your host or a CDN like Cloudflare, is serving a stale version of the checkout page or its scripts to some visitors, so they get an old broken bundle while others get the fixed one. A browser extension, commonly an ad blocker or privacy extension, is blocking the payment gateway script or the fraud-protection iframe on one device but not another. Or a security plugin or firewall rule is challenging some sessions with a CAPTCHA that interrupts the order submission. The way to confirm is to test checkout in a private or incognito window with all extensions off, then clear every caching layer including the CDN, then watch whether the failure follows the device, the network, or the logged-in state.

Why does my checkout say the payment could not be processed even though my card is fine?

A payment that the gateway rejects, as opposed to a button that does nothing, is a configuration or compliance problem rather than a front-end conflict. The most common causes are API keys that are still in test mode on a live store, or live keys pasted into the test field, a currency on the order that the gateway account is not approved to charge, a missing or failed 3D Secure authentication step that the bank required, or a webhook that never reached your site so the order stays unpaid even though the charge went through. Turn on the gateway logging option, attempt one order, and read the gateway log. It records the exact decline reason from Stripe or PayPal, which is far more specific than the generic message shown to the shopper. That log entry is what turns a guess into a fix.

I added custom checkout fields and now the order will not submit. Why?

Custom checkout fields are one of the most common causes of a checkout that looks fine but refuses to complete. On the classic shortcode checkout, fields added with the older hook-based method can become required without a matching validation message, so the form silently fails validation and never submits. On the Checkout block, fields added by a plugin that predates the block API may not register at all, or may register without the validation the block expects, which stalls the place-order step. The reliable fix is to use a field plugin that explicitly supports your checkout type, block or classic, and to make sure every required field has working validation. If you only need a couple of fields, the modern block-native field API is more stable than bolting old code onto a block checkout.

Sources and further reading

Every WooCommerce-specific claim on this page traces back to WooCommerce documentation, the WooCommerce developer docs, or the WooCommerce GitHub trackers.

Why we fix WooCommerce checkouts faster than a support ticket

2h

2-Hour Guarantee

Fixed in 2 hours or your money back. A store taking no orders cannot wait days for a ticket reply.

$49

Flat Rate $49 to $149

No hourly billing. We have fixed checkout failures across Stripe, PayPal, blocks, and classic.

100%

Money-Back Guarantee

Cannot fix it? You do not pay. Zero risk to you.

Get your checkout taking orders again

We fix WooCommerce checkout failures every week, from missing payment methods to dead buttons to gateway rejections. Flat $49 to $149, done in 2 hours when scope fits, money back if we cannot.

Fix My Checkout Now