如何移除WooCommerce结账页Packlink的自提点提示?
解决Packlink自提点提示移除问题
你之前的代码无效,核心原因是display_drop_off_message是Packlink_Checkout_Handler类的成员方法,而非全局独立函数,直接用函数名调用remove_action无法定位到类内的钩子绑定。以下是几种可行的解决方法:
方法一:通过类名精准移除动作
Packlink的钩子是通过类注册的,你可以用「类名+方法名」的格式来移除,同时要确保代码在插件注册钩子之后执行:
add_action( 'wp_loaded', function() { // 移除Packlink的自提点提示钩子 remove_action( 'wc_add_notice', array( 'Packlink_Checkout_Handler', 'display_drop_off_message' ), 10 ); } );
方法二:过滤通知文本直接屏蔽
如果方法一无效,还可以通过WooCommerce的通知过滤钩子,直接清空目标提示内容:
add_filter( 'woocommerce_get_notices', function( $notices ) { $target_msg = '您必须先填写地址才能搜索自提点'; foreach ( $notices as $type => $notice_group ) { foreach ( $notice_group as $key => $notice ) { if ( $notice['notice'] === $target_msg ) { unset( $notices[$type][$key] ); // 清理空的通知分组 if ( empty( $notices[$type] ) ) { unset( $notices[$type] ); } } } } return $notices; } );
方法三:提高移除动作的优先级
如果Packlink注册钩子的优先级比你的代码高,可以尝试用更高优先级确保代码后执行:
add_action( 'init', function() { remove_action( 'wc_add_notice', array( 'Packlink_Checkout_Handler', 'display_drop_off_message' ), 10 ); }, 20 ); // 优先级设为20,确保晚于插件默认的10执行
注意事项
- 代码请添加到当前主题的
functions.php文件或自定义插件中,不要直接修改Packlink核心文件,避免插件更新后失效。 - 确认类名
Packlink_Checkout_Handler是否与你使用的插件版本一致,可查看class-checkout-handler.php文件顶部的类定义。
内容的提问来源于stack exchange,提问作者Emiliano
相关产品推荐
相关产品推荐

