在插件内部,我使用gettext过滤器更改主题的字符串,这样我就不必将模板文件复制到子主题并编辑它们。此外,这并不总是可能的,因为许多字符串都位于主题设置文件中的类定义内。这是我的代码:
function ctf_filter_gettext($translated, $original, $domain) {
// This is an array of original strings
// and what they should be replaced with
$strings = array(
\'Howdy, %1$s\' => \'Greetings, %1$s!\', //wordpress core
\'Apply for Job\' => \'Reply by Email\', //theme specific
// Add some more strings here
);
// See if the current string is in the $strings array
// If so, replace it\'s translation
if (isset($strings[$original])) {
// This accomplishes the same thing as __()
// but without running it through the filter again
$translations = &get_translations_for_domain($domain);
$translated = $translations->translate($strings[$original]);
}
return $translated;
}
add_filter(\'gettext\', \'ctf_filter_gettext\', 99, 3);
主题内部有一行,例如:
__(\'Apply for Job\',\'jobify\')
您可以在上面的代码中看到,我想将其更改为“通过电子邮件回复”
但这行不通。
代码中的另一行(你好…)是Wordpress核心的一部分,这确实有效。事实上,我可以用上述代码覆盖任何其他插件的可翻译文本或Wordpress core中的任何内容。
是什么导致此特定主题忽略我的字符串翻译?注意,无论过滤器的优先级是1、99还是9999,它仍然不起作用。