WooCommerce中remove_action移除wc_empty_cart_message不生效如何解决
移除
wc_empty_cart_message提示失效的解决方案 失效核心原因
你写的remove_action没有生效,大概率是执行时机不对:remove_action必须在对应add_action执行完成后、钩子实际触发前运行才会生效,如果你直接把移除代码写在主题functions.php根层级,很可能在主题、插件挂载该钩子前就执行了移除操作,后续挂载的动作还是会生效。
排查&解决步骤
- 第一步:确认钩子的实际挂载优先级
很多主题、二次开发代码会修改wc_empty_cart_message的挂载优先级,不再是默认的10,你可以临时添加以下调试代码到functions.php,输出该钩子的所有挂载回调信息,找到对应回调的实际优先级:
访问店铺页面后,输出内容中找到add_action('wp', function() { global $wp_filter; if (isset($wp_filter['woocommerce_cart_is_empty'])) { echo '<pre>'; print_r($wp_filter['woocommerce_cart_is_empty']->callbacks); echo '</pre>'; } });wc_empty_cart_message对应的优先级数值,替换你原有移除代码中的10参数即可。 - 第二步:调整移除代码的执行时机
把移除操作套在init钩子中执行,设置足够高的优先级,确保所有主题、插件的钩子挂载完成后再执行移除:add_action('init', function() { // 此处优先级替换为第一步查到的实际数值 remove_action( 'woocommerce_cart_is_empty', 'wc_empty_cart_message', 10 ); }, 999); - 第三步:处理非默认钩子输出的提示
如果执行前两步后提示仍然存在,说明该提示不是来自默认的woocommerce_cart_is_empty钩子:- 前端右键点击提示框选择「检查」,查看元素的class属性,如果包含
woocommerce-info、woocommerce-notice类名,属于WooCommerce全局通知,用以下代码过滤指定文本的通知:
add_filter('woocommerce_add_notice', function($message, $notice_type) { if (str_contains($message, '结账为空时购物车不可用')) { return ''; } return $message; }, 10, 2);- 兜底方案:直接添加CSS隐藏对应提示,将下面代码添加到主题自定义CSS设置中即可:
/* 替换为你实际查到的提示框class名 */ .woocommerce-notice:contains("结账为空时购物车不可用") { display: none !important; } - 前端右键点击提示框选择「检查」,查看元素的class属性,如果包含
内容的提问来源于stack exchange,提问作者J.K.
相关产品推荐
相关产品推荐

