WooCommerce会员计划标题前端多语言过滤失效问题求助
问题:PolyLang过滤WooCommerce会员计划标题在前端会员区域失效
问题详情
我想用PolyLang根据当前语言过滤WooCommerce会员计划的标题,现有代码在后台会员计划列表页(/wp-admin/edit.php?post_type=wc_membership_plan)生效:切换非英语语言时,ID为3884的会员计划标题会变成「原标题 - Not English」,但在前端「我的账户-会员区域」(/my-account/members-area/)页面完全无效,无论切换哪种语言都显示原始标题。
通过日志排查发现,后台页面会调用自定义的my_the_title函数并传入ID3884,但前端页面不会触发这个函数,推测the_title过滤器不适用于前端会员区域的场景,但不知道原因和替代方案。
现有代码
function my_the_title( $title, $id ) { if (pll_current_language( 'slug' ) == 'en') { return $title; } if ( $id == '3884' ) { return $title . ' - Not English'; } return $title; } add_filter( 'the_title', 'my_the_title', 10, 2 );
环境信息
- WordPress 6.3
- WooCommerce 8.0.2
- WooCommerce Memberships 1.25
- PolyLang Pro 3.4.5
- PolyLang for WooCommerce 1.8
解决方案
WooCommerce Memberships在前端会员区域显示计划标题时,并未使用通用的the_title过滤器,而是调用了插件自身的专属函数,对应的过滤器为wc_memberships_get_membership_plan_title。你可以替换原有过滤器,或同时保留后台与前端的过滤逻辑:
替换后的代码
function my_membership_plan_title( $title, $plan ) { // 仅针对ID为3884的计划生效 if ( $plan->get_id() != 3884 ) { return $title; } // 英文语言下返回原标题 if ( pll_current_language( 'slug' ) == 'en' ) { return $title; } // 非英文语言添加后缀 return $title . ' - Not English'; } // 前端会员区域生效的过滤器 add_filter( 'wc_memberships_get_membership_plan_title', 'my_membership_plan_title', 10, 2 ); // 保留后台的the_title过滤器(可选,如需后台也生效则保留) function my_the_title( $title, $id ) { if (pll_current_language( 'slug' ) == 'en') { return $title; } if ( $id == '3884' ) { return $title . ' - Not English'; } return $title; } add_filter( 'the_title', 'my_the_title', 10, 2 );
说明
wc_memberships_get_membership_plan_title过滤器接收两个参数:标题$title和会员计划对象$plan,通过$plan->get_id()可获取计划ID,精准定位目标计划。- 若仅需前端生效,可删除后台的
the_title过滤器部分;若需前后台均生效,则保留两段过滤逻辑即可。
内容的提问来源于stack exchange,提问作者Uwe
相关产品推荐
相关产品推荐

