我试图在导航中添加自定义语言切换链接。问题是我有两个菜单位置header-main
和footer-main
(这些是菜单slu))。但我只想在header-main
菜单中找到语言链接。
目前wordpress回调wp_nav_menu_items
工作正常,但它会将处理后的链接添加到所有菜单位置。以下是它的工作代码:
function icl_post_languages() {
return icl_get_languages('skip_missing=1');
}
function get_translation_navigation() {
$nav = '';
$lang_nav = icl_post_languages();
if (count($lang_nav) > 0) {
foreach ($lang_nav as $item) {
$nav .= '<li>';
$nav .= '<a href="' . $item['url'] . '">' . $item['native_name'] . '</a>';
$nav .= '</li>';
}
}
return $nav;
}
add_filter('wp_nav_menu_items', 'add_translation_navigation');
function add_translation_navigation($menu) {
$language_nav = get_translation_navigation();
$menu = $menu . $language_nav;
return $menu;
}
但是当我将wordpress过滤器更改为:
add_filter('wp_nav_menu_header-main_items', 'add_translation_navigation');
因此,过滤器仅应用于header-main
菜单。当当前语言为English
时,它会工作并触发过滤器,当语言切换为Arabic
时,它不会触发过滤器。
此外,还有两个单独的菜单,一个用于Arabic
,另一个用于English
,但两者的位置相同,即header-main
答案 0 :(得分:2)
我可能会误解这个问题,但看起来您对{em>主题位置和菜单slu 有关wp_nav_menu_{$menu->slug}_items
过滤器的混淆。你可以尝试例如:
add_filter('wp_nav_menu_items', 'add_translation_navigation', 99, 2 );
function add_translation_navigation( $menu, $args )
{
if( 'header-main' == $args->theme_location )
$menu .= get_translation_navigation();
return $menu;
}
检查特定的header-main
主题位置。
答案 1 :(得分:0)
我不认为WordPress使用与此处描述的相同的菜单slug处理两个不同的菜单。因此,它只将您的脚本应用于两个菜单中的第一个。
我宁愿建议你将菜单slu to改为:
header-main-english
header-main-arabic
然后只需添加:
add_filter('wp_nav_menu_header-main-english_items', 'add_translation_navigation');
add_filter('wp_nav_menu_header-main-arabic_items', 'add_translation_navigation');