Why Won't My WooCommerce Checkout Total Update?

How WooCommerce Recalculates the Total

Rather than reloading the entire page, WooCommerce checkout uses an AJAX request to recalculate and re-render just the order review section whenever something relevant changes. This keeps checkout feeling fast, but it also means a failure in that specific request — rather than a general page error — is what breaks total updates, and that kind of failure is invisible unless you specifically check for it.

Common Causes of Totals Not Updating

  • A JavaScript error elsewhere on the page preventing the AJAX call from firing at all, the same class of issue behind several other checkout display bugs.
  • A security or firewall plugin blocking the AJAX endpoint (admin-ajax.php or the equivalent REST endpoint for block checkout), mistaking legitimate checkout traffic for something suspicious.
  • A server-side PHP error during the recalculation itself, triggered by a plugin hooking into the cart/checkout totals calculation incorrectly, which the browser would receive as a failed or malformed AJAX response.
  • Aggressive caching of the AJAX response, serving a stale total that doesn't reflect the actual current cart state.

How to Diagnose and Fix It

  1. Open the browser's network tab and trigger the total update (change shipping, apply a coupon) to see whether the AJAX request fires, and what response it gets back.
  2. Check the browser console for JavaScript errors that might be blocking the request from firing in the first place.
  3. Temporarily disable security/firewall plugins on staging to test whether one is blocking the AJAX endpoint.
  4. Check server-side error logs if the AJAX request fires but returns an error response, since that points to a PHP-level issue in the recalculation itself.

Losing sales to a checkout total that won't update correctly? See WooCommerce fixes.

Watching the update request

  1. Classic checkout. In the browser's Network tab, filter to Fetch/XHR and change the country or shipping method. Look for a request to ?wc-ajax=update_order_review. Its response should be JSON containing the refreshed order review. An HTML error page, a 403 or a 500 identifies the failure.
  2. Block checkout. Updates go through the Store API, so look for requests under /wp-json/wc/store/. A security plugin that disables the REST API for logged-out visitors breaks this checkout completely.
  3. If no request is sent, the cause is a JavaScript error. Check the Console.
  4. If the request succeeds but the totals are wrong, a plugin is altering the calculation. Test with other plugins disabled, one at a time.

Never cache the endpoint

Requests containing wc-ajax are dynamic by nature. If a caching layer stores them, every shopper sees someone else's totals or none at all, so confirm your cache and CDN rules exclude them.

Go deeper

Available for new projects

NEXT STEP

Rather have it fixed than keep reading?

Based in Dhaka, Bangladesh — serving clients worldwide. Tell me what's happening and you'll have a reply within one working day.

  • Reply within one working day
  • Fixed quote before work starts
  • UK, EU and US hours covered