我正在开发一个多语言主题。我使用\\uuu()函数进行翻译,效果很好。主要语言是英语,但第二语言是德语。对于第二种语言,我想添加一个“/de/”-Slug,因此我创建了一个重写规则:
function rewrite_rule_de(){
add_rewrite_rule(\'de/(.+?)/?$\', \'index.php?pagename=$matches[1]&language=de\', \'top\');
}
add_action(\'init\', \'rewrite_rule_de\');
如您所见,我还添加了一个get变量(language=de),它应该告诉Wordpress,显示的页面是德语。因为Wordpress不只是处理这个get变量,所以我将它添加到query\\u vars中:
function language_query_var($public_query_vars){
$public_query_vars[] = \'language\';
return $public_query_vars;
}
add_action(\'query_vars\', \'language_query_var\');
我想根据显示的页面语言更改区域设置,因此我使用以下函数:
function set_my_locale( $lang ){
if (\'de\' == get_query_var(\'language\')){
return \'de_DE\';
}else{
return \'en_US\';
}
}
add_filter(\'locale\', \'set_my_locale\');
我这里的问题是get\\u query\\u var(\'language\')没有在函数“set\\u My\\u locale”中定义。但它在循环之前使用时有效,例如。。。
因此,我的问题很简单:如何根据重写规则更改语言环境(以便\\uu()-函数输出正确的语言)?
最合适的回答,由SO网友:TheDeadMedic 整理而成
我的问题是get_query_var(\'language\')
未在函数中定义set_my_locale
因为get_locale
(适用于过滤器locale
) 之前已调用wp()
(解析查询并设置变量)。
您必须自己手动检查请求:
if ( strpos( $_SERVER[\'REQUEST_URI\'], \'/de/\' ) === 0 ) {
// German
} else {
// English
}
注意,这需要WordPress在根URL下运行,即。
http://example.com/