无法使WooCommerce Memberships的wc_memberships_member_discount_message过滤器钩子生效
嘿,我之前折腾这个钩子的时候也踩过不少坑,大概率是这几个细节没做到位,你可以挨个排查:
先确认钩子的触发场景是否满足
这个钩子可不是随便什么情况都能触发的!它只在非会员/未登录用户浏览带有会员专属折扣的产品时才会工作。你得先确保给目标产品设置了正确的会员专属折扣(比如给某个会员等级设置了专属低价),而且后台里这个折扣的提示状态是开启的——要是产品本身没会员折扣,钩子根本不会启动,自然看不到效果。函数的参数和返回值不能错
很多人注册钩子时要么参数数量不对,要么忘了返回修改后的内容,直接导致钩子“无效”。这个钩子官方定义了3个参数,注册时要把参数个数声明对,而且最后一定要return修改后的消息!给你个亲测有效的示例代码:add_filter( 'wc_memberships_member_discount_message', 'my_custom_discount_message', 10, 3 ); function my_custom_discount_message( $original_message, $product, $discount_data ) { // 这里替换成你想要的自定义消息,比如结合折扣金额 $new_message = '加入我们的会员,就能享受专属优惠,直接省' . wc_price( $discount_data['amount'] ) . '!'; return $new_message; }注意
add_filter的第四个参数是3,对应函数里的3个参数,少了的话函数拿不到后面的产品和折扣数据,逻辑也会出问题。代码放对位置很重要
别把代码随便扔到主题的模板文件(比如header.php)里,最好放到子主题的functions.php,或者自己搭的轻量自定义插件里。放父主题的functions.php的话,主题一更新代码就没了,而且父主题的加载顺序可能让钩子注册晚了,赶不上触发时机。缓存和插件冲突要排查
先清干净网站的所有缓存(页面缓存、对象缓存,还有浏览器的缓存),有时候旧的提示消息被缓存住了,你改了代码也看不到变化。另外可以暂时禁用其他和WooCommerce相关的插件,看看是不是有别的插件也在修改这个钩子,优先级比你的高,把你的自定义消息覆盖了。检查Memberships版本
这个钩子是在WooCommerce Memberships的某个版本之后才新增的,如果你用的是好几年前的旧版本,可能根本没有这个钩子。建议升级到最新的稳定版再测试。
备注:内容来源于stack exchange,提问作者Mike_Piercy

