WordPress中的__()和_e()函数无法起作用的奇怪现象
最近一直研究wordpress主题制作。为了更合规,我准备使用了_e()
函数来调用相关文字内容,这样,就可以兼容其他语言版本了。但我发现,我主题中使用的_e()和__()
都失效了。所以在微博上发出此文求救,希望熟悉该函数的朋友能帮下。
先说说_e()和__()
这两个函数被用来识别php文件中被标示的、需要被翻译成其它语言或本地化的字符串。不同的是_e()
返回的值是可显示的(echo)字符串,而__()
只是简单的返回字符串。如果你需要在HTML上显示相应文字,就使用前者;不需要显示,只作为函数运用中的一部分的话就可以使用后者。
function _e( $text, $domain = 'default' ) {
echo translate( $text, $domain );
}
function __( $text, $domain = 'default' ) {
return translate( $text, $domain );
}
这两段代码在wordpress安装路径下的\wp-includes\l10n.php文件里可以查找到。
_e()和__()的使用方法
__()和_e()需要在主题包里的functions.php文件中插入一段代码,通过一个load_theme_textdomain()
函数来启用具体位置的字体mo文件。我的主题名称叫paipk1
,下面这段代码就是我主题里的,省略了不重要的其他部分:
function paipk1_setup() {
load_theme_textdomain( 'paipk1' );
//方法一:直接调用;
load_theme_textdomain( 'paipk1', get_template_directory() . '/languages' );
//方法二:在主题下有个languages的文件夹,调用里面的.mo文件;
//上述两种方法我都尝试过,都无效。
}
add_action('after_setup_theme','paipk1_setup');
然后,在主题PHP文件需要的地方直接引入代码即可:
<?php _e('next','paipk1'); ?>
我使用的是wordpress的中文包,理想状态下,应该是把“next”直接翻译成中文嵌入HTML里。带实际情况上还是输出的英文“next”。
自我问题排查
首先,我的wordpress在使用其他主题(twentyfourteen)时能正常显示中文,这就说明安装wordpress默认位置的中文包“zh_CN.mo”正常。
其次,主题的paipk1_setup()
函数正常,因为此函数下我做了其他相关函数的启用,都正常。所以这个应该能排除掉。
最后,在主题模板的header.php文件中,我也在<html>
标签上插入相关引用,正常显示:
<html <?php language_attributes(); ?>> <!-- 查看源代码显示如下: --> <html lang="zh-CN">
那么,现在问题来了,这到底是什么情况让它无法正常运行出中文汉字呢??
得到的回复
倡萌:自己看下文章 https://www.wpdaxue.com/localize-wordpress-themes.html;
紫铜炉:但为什么默认的主题是用的:load_theme_textdomain( ‘twentyfourteen’ )
?
倡萌:那是因为它是官方主题,语言包可以在后台直接进行独立安装和更新,而我们自己的主题不行。