是的,你可以use the gettext
filter. 不,它不是最快的过滤器,但只有在野外向该过滤器添加回调时才是这样:
坏例子是bad 因为它会对当前请求中的数百个可翻译请求中的每一个进行字符串比较:
add_filter( \'gettext\', function( $translated, $original, $domain ) {
return \'foo\' === $original ? \'bar\' : $translated;
}, 10, 3 );
很好的例子,您可以在需要过滤器之前添加过滤器,然后将其移除,从而加快速度:
想象一下以下核心代码、插件代码或主题代码(示例):
do_action( \'before\' );
_e( \'foo\', \'textdomain\' );
现在,让我们为
gettext
过滤器:
add_action( \'before\', \'wpse228163GettextReplacement\', 10, 3 );
function wpse228163GettextReplacement( $translated, $original, $domain )
{
// Instantly remove the filter so it only runs once
remove_filter( current_filter(), __FUNCTION__ );
return \'foo\' === $original
? \'bar\'
: $translated;
}
ProTip: 如果要替换多个字符串,可以在第一个字符串之前钩住最新的操作或筛选,然后在下一个操作中删除回调,或在最后一个字符串之后筛选。
do_action( \'before\' );
_e( \'foo\', \'textdomain\' );
do_action( \'after\' );
添加&;删除它:
add_action( \'before\', function() {
// Add filter
add_filter( \'gettext\', \'wpse228163GettextReplacement\', 10, 3 );
// Remove filter when we are done
add_action( \'after\', function() {
remove_filter( \'gettext\', \'wpse228163GettextReplacement\' );
} );
} );