More fixes

WooCommerce checkout not working

Customers fill the cart, reach the checkout, and the order never goes through: the Place order button spins forever, the page says the session has expired, there are no payment methods, or there are no shipping options. Every hour this lasts is lost sales, and often nobody tells you; the orders just stop. Below is a rebuilt example (not a real client), the five-minute way to find which part is failing, and the fix for each cause.

The checkout a customer sees

What the checks found


  

First: place a test order yourself (five minutes)

  1. Use a private browser window, logged out. Logged-in admins often skip the cache and see a working checkout while customers do not. Add one cheap product, go to the checkout, and place the order. Do it once on a phone too.
  2. Write down exactly what happens: the wording of any red message, whether payment methods and shipping options appear, and whether the button spins and stops or spins forever.
  3. Read WooCommerce's own logs. In the dashboard, WooCommerce > Status > Logs. Look for a fatal-errors log and the log of your payment plugin (Stripe, PayPal, Square) for the time of your test. A line there usually names the cause.
  4. If the button spins forever with no message, open the browser's developer console (F12, Console tab) on the checkout and press Place order again. A red JavaScript error that names a plugin file is the plugin to look at first.

The causes, most common first

  1. The cart and checkout pages are being cached. A cached checkout hands every visitor the same old security token, so orders fail with "Your session has expired" or the cart empties at checkout. Caching plugins usually exclude Cart, Checkout and My account by themselves, but a host's server cache or a CDN rule such as Cloudflare "Cache Everything" may not. Exclude those three pages (and the woocommerce_items_in_cart and wp_woocommerce_session_ cookies) everywhere a cache runs, then clear all caches.
  2. The payment plugin is in test mode, or its keys are wrong or expired. Common after a move to a new domain, a new Stripe or PayPal account, or a plugin update that asks you to reconnect. Open WooCommerce > Settings > Payments, open the gateway, check test mode is off and the account shows as connected. For Stripe, also check the webhook in the Stripe dashboard points at the current address and shows recent successful deliveries.
  3. A plugin or theme update broke the page. If checkout stopped right after an update, that update is the first suspect. On a staging copy (or at a quiet hour, after a backup), switch every plugin off except WooCommerce and the payment plugin, test, then switch them back one at a time. The plugin conflict guide has the steps.
  4. An older payment or checkout plugin does not work with the new checkout block. Since WooCommerce 8.3 (November 2023) new stores get a block-based checkout, and some older gateways and checkout add-ons only work on the classic one; the payment method then simply does not show. Edit the Checkout page: the editor warns when an extension is not compatible. The quick fix is to update the plugin; if there is no compatible version, switch the page back to the classic checkout (the Checkout block has a "Switch to classic checkout" option, or replace the block with the [woocommerce_checkout] shortcode).
  5. "There are no payment methods available." No gateway is enabled for this order: check each is switched on, and whether one is limited to some countries, currencies or a minimum amount that this cart does not meet.
  6. "No shipping options were found." The customer's address is not in any shipping zone that has a method. In WooCommerce > Settings > Shipping, every zone you sell to needs at least one method, and the zone list is matched top to bottom, so a narrow zone with no methods above a wide one catches addresses first.
  7. The site's security certificate or address changed. A checkout on http, or one that loads parts from the old address, can be blocked by the browser or the payment provider. See the "Not secure" guide and the mixed content guide.
  8. A server error under the page. If the logs show a fatal error or the checkout returns a 500, follow the critical error guide and the 500 error guide; old PHP and a full memory limit are frequent causes (memory guide).

What you see, what it means, what it needs

What you seeUsual causeUsual fix
"Your session has expired" or the cart empties at checkoutCart or checkout page cached (host cache or CDN)Exclude Cart, Checkout, My account and the Woo cookies from every cache
Place order spins forever, no messageA JavaScript error from a plugin or theme, or a server errorConsole error names the file; plugin conflict test; read the fatal-errors log
"There was an error processing your order" after the card is enteredPayment keys wrong, test mode on, account not connectedReconnect the gateway; test mode off; check the webhook
Card payment option missing, PayPal shows (or the reverse)Gateway not compatible with the checkout block, or limited by country/currencyUpdate it, or switch to the classic checkout
"No shipping options were found for..."Address not in a zone with a methodAdd a method to each zone; check zone order
Order paid at Stripe or PayPal but shows "Pending payment" in WooCommerceWebhook pointing at an old address or failingFix the webhook URL; resend the failed events
Works for you, fails for customersYou are logged in and skip the cacheTest logged out, in a private window, on a phone

What not to do

Once the cause is known, most checkout faults are fixed in an hour or two, and a test order proves it. If you would rather hand it over, that is what the box below is for. Related: a plugin that broke the site, order emails that never arrive and a site that is slow to load.