我在开发WordPress主题时遇到以下问题,我想问你这个解决方案是否是一个好的解决方案,或者是否存在更好的方法。
我有一个自定义的WP主题,在这个主题中有一个主菜单。该网站是多语言(意大利语和英语)的,因此如果访问者是意大利人,我必须加载意大利语主菜单(包含意大利语菜单项),如果用户不是意大利人,则必须加载英语版本的主菜单。
所以我找到了这个解决方案:
在WP后端,我创建了两个不同的菜单:Menu 1 和Menu 2 (第一个用意大利语发音,第二个用英语发音)
然后在我的主题内(进入header.php 文件)我声明类似的内容:
首先,我从$_SERVER[\'HTTP_ACCEPT_LANGUAGE\']
然后,如果$lang 值为it* or *Menu 2 if the *$lang 值为en
类似这样的:
<?php
$lang = substr($_SERVER[\'HTTP_ACCEPT_LANGUAGE\'], 0, 2);
//echo "Language is $lang"; IT SEEMS TO WORK: MY LANGUAGE IS CORRECTLY RECOGNIZED AS it
if($lang == it){ // If the user is Italian load Italian menu
wp_nav_menu(array(
\'menu\' => \'Menu 1\',
\'theme_location\' => \'primary\',
\'depth\' => 2,
\'container\' => \'div\',
/*\'container_class\' => \'navbar navbar-default\',*/
\'menu_class\' => \'nav navbar-nav\',
\'fallback_cb\' => \'wp_bootstrap_navwalker::fallback\',
\'walker\' => new wp_bootstrap_navwalker())
);
}
else{ // If the user is not italian load English menu
wp_nav_menu(array(
\'menu\' => \'Menu 2\',
\'theme_location\' => \'primary\',
\'depth\' => 2,
\'container\' => \'div\',
/*\'container_class\' => \'navbar navbar-default\',*/
\'menu_class\' => \'nav navbar-nav\',
\'fallback_cb\' => \'wp_bootstrap_navwalker::fallback\',
\'walker\' => new wp_bootstrap_navwalker())
);
}
?>
我认为这种方式必须正确工作(我必须尝试),但这是一个好的解决方案,还是我可以用其他方式做得更好?
SO网友:Nicolae
我也有同样的问题。我使用了Polylang插件和3种语言。因此,我创建了如下3个菜单:https://www.diigo.com/item/image/4o9rz/opx5.之后,我检查了语言并显示了正确的菜单,如下所示:
<?php
if (get_locale() == \'en_US\') {
wp_nav_menu(array(
\'menu\' => \'Primary Menu En\',
\'depth\' => 2,
\'container\' => false,
\'menu_class\' => \'nav navbar-nav\',
\'walker\' => new wp_bootstrap_navwalker()
));
} else if (get_locale() == \'ro_RO\') {
wp_nav_menu(array(
\'menu\' => \'Primary Menu Ro\',
\'depth\' => 2,
\'container\' => false,
\'menu_class\' => \'nav navbar-nav\',
\'walker\' => new wp_bootstrap_navwalker()
));
} else if (get_locale() == \'ru_RU\') {
wp_nav_menu(array(
\'menu\' => \'Primary Menu Ru\',
\'depth\' => 2,
\'container\' => false,
\'menu_class\' => \'nav navbar-nav\',
\'walker\' => new wp_bootstrap_navwalker()
));
}
?>
SO网友:David Salcer
我不确定这是否是正确的解决方案,但由于我也使用自定义主题等,我倾向于以这种方式创建菜单,我可以利用;后缀“;或“或”;鼻涕虫“;用于确定当前语言的语言插件。
所以创建后缀变量字符串
$lang_suffix = "_". pll_current_language(\'slug\');
然后再打电话就可以了。当然,您需要在自己的菜单上创建一些需要符合惯例的菜单”;Menu-EN“菜单”"E;菜单“;。。。等等此外,少量if()检查也有助于避免碰到不存在的值。但你说得对。
$lang_suffix = "_". pll_current_language(\'slug\');
wp_nav_menu( array(
\'menu\' => \'Menu\'.$lang_suffix,
//\'theme_location\' => \'primary-menu\',
\'depth\' => 5,
\'container\' => \'ul\',
\'container_class\' => \'\',
\'menu_class\' => \'text-uppercase navbar-nav ml-auto my-2 my-lg-0\',
\'fallback_cb\' => \'wp_bootstrap_navwalker::fallback\',
\'walker\' => new wp_bootstrap_navwalker())
);
?>