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.phpor 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
- 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.
- Check the browser console for JavaScript errors that might be blocking the request from firing in the first place.
- Temporarily disable security/firewall plugins on staging to test whether one is blocking the AJAX endpoint.
- 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
- 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. - 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. - If no request is sent, the cause is a JavaScript error. Check the Console.
- 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
- Full diagnostic guide: WooCommerce Cart Stuck or Not Updating? Here's the Actual Cause. — the step-by-step version of this problem, with the likely causes in the order worth checking.