问题描述
我多年来使用的代码(下面的示例)有一段时间没用了。尝试了此处发布的其他一些代码,但没有任何乐趣。似乎 WC 更改了过滤/翻译的方式,并且每个更改的文本都需要分开。那是对的吗?最初使用此代码进行了 11 次文本更改...
希望有一些代码可以在 WC 5.0 中执行文本更改,谢谢!
add_filter('gettext','translate_text');
add_filter('ngettext','translate_text');
function translate_text($translated) {
$translated = str_ireplace('Products','Prints',$translated);
$translated = str_ireplace('Product','Print',$translated);
$translated = str_ireplace('Product Categories',$translated);
return $translated;
}
解决方法
WordPress 钩子 gettext
和 ngettext
一段时间以来没有变化,它们处理可翻译字符串,独立于 WooCommerce 版本...
使其与 gettext
和 ngettext
钩子一起工作的正确方法是(稍微简化并添加一些缺少的函数参数):
add_filter( 'gettext','change_some_woocommerce_strings',10,3 );
add_filter( 'ngettext',3 );
function change_some_woocommerce_strings( $translate_text,$original_text,$domain ) {
if ( stripos( $original_text,'Product') !== false || stripos( $original_text,'Categories') !== false ) {
$translate_text = str_ireplace(
array('Product categories','Products','Product'),array('Prints','Prints','Print'),$original_text );
}
return $translate_text;
}
如果某些字符串未翻译,可能是因为它们添加了一些上下文。在这种情况下,钩子 gettext_with_context
是必需的,例如:
add_filter( 'gettext_with_context','change_some_woocommerce_strings_with_context',4 );
function change_some_woocommerce_strings_with_context( $translate_text,$context,$original_text );
}
return $translate_text;
}
代码位于活动子主题(或活动主题)的functions.php 文件中。经测试有效。
,这是对我有用的代码。将 2 ibc 更改为您想要的名称或保留它。不要忘记更改您要使用的名称而不是 Print(s)
add_filter( 'gettext','ibc_translate_woocommerce_strings',999,3 );
function ibc_translate_woocommerce_strings( $translated,$untranslated,$domain ) {
if ( ! is_admin() && 'woocommerce' === $domain ) {
switch ( $translated ) {
case 'Products':
$translated = 'Prints';
break;
case 'Product':
$translated = 'Print';
break;
case 'Product Categories':
$translated = 'Print';
break;
// ETC
}
}
return $translated;
}