EA Woo Checkout添加/移除优惠券后结账页无法自动刷新问题求助
失效原因
你之前写的代码无法触发是因为WooCommerce发起优惠券操作的AJAX请求时,URL会自动附带校验nonce、时间戳等额外查询参数,使用全等于(===)规则无法命中对应请求。同时你使用的Essential Addons的EA Woo Checkout模块有独立的更新事件,原生update_checkout无法覆盖其数据刷新。
可用解决方案
方案1:操作优惠券后全页刷新(最稳妥,100%同步翻译价格)
在结账页页脚插入如下代码即可:
jQuery(document).ready(function() { jQuery(document).ajaxComplete(function(event, xhr, settings) { // 模糊匹配包含优惠券操作的请求路径 if (settings.url.includes('wc-ajax=apply_coupon') || settings.url.includes('wc-ajax=remove_coupon')) { // 加300ms延迟等待优惠券操作逻辑执行完成再刷新 setTimeout(function() { location.reload(); }, 300); } }); });
方案2:无刷新更新结账数据(用户体验更好)
如果不想全页刷新,可以用WooCommerce原生优惠券事件触发局部更新,同时适配EA Woo Checkout模块:
jQuery(document).ready(function() { // 监听优惠券应用、移除的原生完成事件 jQuery(document).on('applied_coupon removed_coupon', function() { setTimeout(function() { // 触发WooCommerce原生结账更新 jQuery('body').trigger('update_checkout'); // 触发EA Woo Checkout订单预览模块的独立更新 jQuery(document).trigger('ea_woo_checkout_update_order_review'); }, 200); }); });
部署注意事项
- 代码需要放在jQuery资源加载完成之后插入,避免出现
jQuery is not defined报错 - 部署完成后清空站点缓存、浏览器本地缓存后再测试效果
内容的提问来源于stack exchange,提问作者namari
相关产品推荐
相关产品推荐

