WordPress+WooCommerce 3.4.0版本下如何禁用购物车AJAX(fragments)?
解决WooCommerce最新版本中禁用
wc-ajax get_refreshed_fragments的问题 我最近帮不少开发者处理过这个头疼的问题——WooCommerce更新后,之前靠dequeue script或者旧插件禁用购物车片段的方法确实失效了,官方调整了脚本加载的底层逻辑。下面分享几个经过验证的有效方案,你可以根据自己的网站需求选择:
方案一:条件性启用脚本(推荐)
这个方法最灵活,只在真正需要的页面保留购物车片段脚本,其他页面直接移除,既不影响购物功能,又能减少不必要的加载时间。
把这段代码放到主题的functions.php文件,或者自己创建的自定义插件里:
add_action('wp_enqueue_scripts', 'disable_wc_cart_fragments_conditionally', 99); function disable_wc_cart_fragments_conditionally() { // 只在产品页、购物车页、结账页保留脚本,其他页面移除 if (!is_product() && !is_cart() && !is_checkout() && !is_add_payment_method()) { wp_dequeue_script('wc-cart-fragments'); wp_deregister_script('wc-cart-fragments'); // 重新注册woocommerce主脚本,避免影响其他功能 wp_dequeue_script('woocommerce'); wp_deregister_script('woocommerce'); wp_enqueue_script('woocommerce', WC()->plugin_url() . '/assets/js/frontend/woocommerce.min.js', array('jquery'), WC_VERSION, true); } }
如果你的网站有其他需要保留购物车片段的页面(比如自定义的会员页),可以在条件判断里添加对应的页面检测,比如&& !is_page('member-page')。
方案二:彻底禁用AJAX请求
如果你的网站完全不需要实时更新购物车显示(比如导航栏的购物车数量可以靠页面刷新更新),可以直接让后端返回空片段,前端就不会触发这个AJAX请求了:
add_filter('woocommerce_get_refreshed_fragments', '__return_empty_array');
这个方法最简单粗暴,但要确认不会影响你的购物流程,比如添加商品到购物车后的实时反馈如果不需要的话,用这个就很省心。
方案三:禁用内联初始化脚本
WooCommerce会在页面底部输出一段初始化购物车片段的内联JS,我们可以通过钩子阻止这段脚本在非必要页面输出:
add_filter('wc_cart_fragments_params', 'disable_wc_cart_fragments_inline_script'); function disable_wc_cart_fragments_inline_script($params) { if (!is_product() && !is_cart() && !is_checkout()) { return false; } return $params; }
这个方法不会移除脚本文件本身,但会阻止它初始化运行,同样能避免触发那个耗时的AJAX请求。
注意事项
- 不管用哪种方法,都建议先在测试环境验证,避免影响正常的购物功能;
- 如果用了缓存插件,记得清除缓存后再测试效果;
- 如果你用的是自定义主题,更新主题时记得备份修改的代码,或者用子主题来保存这些自定义代码,避免被主题更新覆盖。
内容的提问来源于stack exchange,提问作者TomJones999
相关产品推荐
相关产品推荐

