WooCommerce结账页订单详情加载转圈卡住 无wc-ajax请求排查求助
WooCommerce结账页订单详情加载异常问题
- 问题页面:https://ellasbubbles.com/checkout/
- 复现路径:先在https://ellasbubbles.com/walk-in-tub-accessory-pricing/ 将商品加入购物车,再跳转至结账页即可复现
- 已尝试操作:查阅30余篇相关帖子和教程,尝试过禁用所有插件、重置.htaccess、重置functions.php、调高内存限制、修改index.html为php等方案,均未解决
- 已发现异常点:
- XHR请求中无
?wc-ajax=checkout参数的请求记录 - 接口
https://ellasbubbles.com/?wc-ajax=update_order_review返回值为-1
- XHR请求中无
- 临时兜底方案(可生效但不推荐):
/* Fix issues with jquery overlay blocking checkout button */ .woocommerce .blockUI.blockOverlay { position: relative!important; display: none!important; }
- 核心疑问:问题的根本诱因是什么,有无更合理的解决方案?
根本原因
你遇到的问题核心是WooCommerce的update_order_reviewAJAX接口请求失败,默认加载遮罩会一直停留等待请求返回,你通过CSS强制隐藏遮罩属于绕过问题而非解决问题。接口返回-1是WooCommerce AJAX接口的典型错误码,常见触发原因有3类:
- 防篡改令牌(nonce)失效:WooCommerce结账页会生成有效期12-24小时的nonce用于接口校验,如果你的结账页被做了静态缓存(插件缓存、服务器缓存、CDN缓存),缓存过期后nonce失效,接口校验不通过直接返回-1,订单更新请求终止。
- AJAX回调异常:如果有自定义代码误删了
update_order_review对应的动作钩子,或者主题/插件篡改了WooCommerce的AJAX路由规则,也会导致接口无正常返回。 - 会话校验失败:用户访问结账页时未生成有效的购物车会话,接口判断购物车不存在也会返回-1。
更合理的解决方案
1. 优先排查缓存规则
立刻将结账页、购物车页、我的账户页从所有缓存策略(缓存插件、服务器缓存、CDN缓存)中排除,这类动态页面绝对不能做静态缓存。清空所有缓存后重新测试,80%以上的同类问题都可以通过这个操作解决。
2. 校验前端参数是否正常
打开结账页的浏览器开发者工具,在控制台输入woocommerce_params.update_order_review_nonce,看是否有正常的字符串返回。如果返回未定义,检查主题header.php是否遗漏了wp_head()调用,或者是否有插件移除了WooCommerce的前端全局参数注入。
3. 校验AJAX回调是否正常
检查functions.php或者自定义插件中,是否有类似remove_action( 'wc_ajax_update_order_review', 'WC_AJAX::update_order_review' )的代码,如果有直接删除即可。
4. 还原不必要的自定义修改
把之前修改index.html为php的改动全部还原,重新保存WordPress后台的固定链接设置,生成默认的.htaccess规则,避免伪静态规则异常拦截AJAX请求。
内容的提问来源于stack exchange,提问作者user77619
相关产品推荐
相关产品推荐

