WooCommerce商品追加销售标题翻译代码失效求助
WooCommerce追加销售标题翻译失效问题
问题描述
我用一段代码翻译WooCommerce里其他翻译插件未识别的文本,95%的未翻译字符串都能生效,但商品追加销售的“You may also like…”标题始终无效,连Loco Translate也处理不了这个字符串,请问原因是什么?
用到的代码如下:
// Alter WooCommerce View Cart Text add_filter( 'gettext', function( $translated_text ) { if ( 'You may also like…' === $translated_text ) { $translated_text = 'To moze Ci sie spodobac'; } return $translated_text; } );
原因分析
- 字符串精准匹配失败:你代码里用的是全角省略号
…,但WooCommerce源码中该标题的省略号大概率是半角...,或者字符串存在空格、大小写等细微差异,导致全等匹配没命中。 - 钩子参数不全且优先级低:
gettext钩子默认优先级为10,可能被其他主题/插件抢先修改了该字符串;另外你只使用了$translated_text一个参数,未限定woocommerce文本域,无法精准锁定目标字符串。 - 专属钩子绕过了gettext流程:WooCommerce的追加销售标题有专属过滤钩子
woocommerce_upsells_title,该字符串的输出根本不走常规的gettext翻译流程,所以你的代码无法捕获。
解决办法
方法1:修正匹配规则并限定文本域
补全gettext钩子的参数,同时确认源码中的原始字符串(可查看WooCommerce的includes/wc-template-functions.php文件里的woocommerce_upsell_display函数):
add_filter( 'gettext', function( $translated_text, $text, $domain ) { // 限定只处理WooCommerce的文本 if ( 'woocommerce' === $domain && 'You may also like...' === $text ) { $translated_text = 'To moze Ci sie spodobac'; } return $translated_text; }, 20, 3 ); // 提高优先级到20,确保晚于其他修改执行
如果源码里是全角省略号,就把匹配文本改成'You may also like…'。
方法2:使用专属钩子直接修改
针对追加销售标题的专属钩子修改,精准度更高:
add_filter( 'woocommerce_upsells_title', function( $title ) { return 'To moze Ci sie spodobac'; } );
内容的提问来源于stack exchange,提问作者user23439429
相关产品推荐
相关产品推荐

