WooCommerce "No Payment Methods Available" at Checkout: 9 Fixes
A customer reaches your checkout and, where the payment options should be, WooCommerce says "Sorry, it seems that there are no available payment methods." (on some setups: "Please contact us if you require assistance or wish to make alternate arrangements"). Every minute this is live, you're losing orders. Here are the causes I find most often, in the order I check them.
How WooCommerce decides: it starts with every gateway you've enabled, then removes any that say they're "not available" for the current cart, country, currency or shipping method. The message appears when that list ends up empty. So the question is always: which rule removed each gateway?
1. No gateway is actually enabled
Obvious, but check it first. Go to WooCommerce → Settings → Payments and confirm at least one method shows as enabled. After plugin updates or migrations, gateways sometimes come back disabled, or the gateway plugin itself has been deactivated under Plugins.
2. The gateway isn't fully connected
Stripe, PayPal, Square and WooPayments hide themselves when their account connection is incomplete. Common situations:
- API keys are missing, or you have test mode enabled with live keys (or the other way round).
- The account was disconnected after a migration or domain change.
- The payment provider hasn't finished verifying your account.
Open each gateway's settings page. Most show a clear warning when the connection is broken. Reconnect it, and run one real low-value order to confirm.
3. Currency or country isn't supported
Gateways remove themselves when they don't support the store currency or the customer's billing country. For example, some PayPal products only support certain currencies, and many local gateways only work in one country. If the problem only affects customers from one country, this is your prime suspect.
Also check currency-switcher plugins: switching the cart to a currency your gateway doesn't support will hide that gateway for those customers.
4. Cash on Delivery or another gateway is limited to certain shipping methods
Cash on Delivery has an "Enable for shipping methods" setting. If it's limited to "Local pickup" and the customer picks "Flat rate", COD disappears. If COD is your only gateway, the checkout ends up with none. Clear the restriction, or add the missing shipping method.
5. Order total is outside the gateway's limits
Gateways have minimum and sometimes maximum amounts. Stripe, for example, won't charge below a small minimum amount, and "buy now, pay later" methods like Klarna or Afterpay only appear between set totals. A coupon that drops the total below a minimum can hide a gateway for that cart alone.
The opposite case: if the total is exactly 0 (a 100% coupon, free product), WooCommerce doesn't need payment and shows no payment methods. That's expected, and the order button should still work.
6. A conditional-payments plugin or custom code is filtering gateways
Plugins like "Conditional Payments", B2B plugins and role-based pricing plugins can hide gateways by user role, cart contents or customer group. So can a snippet in your theme's functions.php. Search your codebase for the filter they all use:
grep -rn "woocommerce_available_payment_gateways" wp-content/
Any result is a place where gateways can be removed. Read the logic carefully. It's often a condition that made sense once and no longer does.
7. The gateway doesn't support the block-based checkout
Newer WooCommerce installs use the Checkout block by default instead of the old [woocommerce_checkout] shortcode. Gateway plugins that haven't added block support simply don't appear there, even though they work fine with the shortcode checkout.
To check: edit your Checkout page. If you see a "Checkout" block, you're on the block checkout. Click the payment section in the editor. WooCommerce lists any incompatible gateways there and offers to switch to the classic checkout. Either update the gateway to a block-compatible version or switch to the classic shortcode checkout.
8. The checkout page is being cached
Checkout, cart and my-account pages must never be page-cached. If they are, customers can see a stale version of the payment section, or a broken AJAX nonce stops the payment list from refreshing. Check:
- Your caching plugin (WP Rocket, LiteSpeed Cache, W3TC) excludes
/checkout/,/cart/and/my-account/. Most do this automatically, but custom page slugs can slip through. - Cloudflare isn't set to "Cache Everything" for those URLs.
- Your host's server-level cache (Varnish, Nginx FastCGI cache) respects WooCommerce's cookies.
9. A JavaScript error stops the checkout from updating
On the classic checkout, WooCommerce reloads the payment section through an AJAX request to ?wc-ajax=update_order_review whenever the address changes. If another script throws an error first, or that request fails, the payment section never fills in.
- Open the checkout, press F12 and go to the Console tab. Red errors from a theme or plugin script are a strong lead.
- In the Network tab, filter for
update_order_review, change the billing country to trigger it, and check the response. A 403, 500 or HTML error page instead of JSON points to a server-side PHP error or a firewall rule blocking the request.
Debugging: see exactly which gateways are available
If none of the above explains it, log what WooCommerce actually decided. Add this temporarily as a small mu-plugin (wp-content/mu-plugins/debug-gateways.php) on staging:
<?php
add_filter( 'woocommerce_available_payment_gateways', function ( $gateways ) {
if ( is_checkout() ) {
error_log( 'Available gateways: ' . implode( ', ', array_keys( $gateways ) ) );
}
return $gateways;
}, 9999 );
With WP_DEBUG_LOG enabled, every checkout load writes the final list to wp-content/debug.log. Running at priority 9999 shows what's left after every other plugin has applied its filters. Lower the priority to see the list before some plugin removes a gateway. Delete the file when you're done.
Also check WooCommerce → Status → Logs. Most gateways write errors there, such as failed API authentication, when logging is enabled in their settings.
Still stuck?
When none of these apply, the cause is usually two plugins conflicting: a currency switcher and a gateway, or a B2B plugin and a shipping plugin. The fastest way to isolate it is a staging copy with plugins disabled one at a time until the gateways come back.
Written by
Sameer Hussain, Senior Shopify & WordPress Engineer
Top Rated on Upwork and the Shopify & WordPress engineer at Inceptus Digital. Short on time, or not comfortable editing code? Send me your URL and the error on Upwork and I'll tell you how I'd fix it before you commit.
Need Custom Engineering or Growth Systems?
Our team helps ambitious brands build bespoke software, AI integrations, and high-conversion platforms.