0

语境

我试图在导航中添加自定义语言切换链接。问题是我有两个菜单位置header-mainfooter-main(这些是菜单块)。但我只想要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它时,它不会触发过滤器。

此外,还有两个单独的菜单,一个 forArabic和一个 for English,但两者的位置相同,即header-main

4

2 回答 2

2

我可能误解了这个问题,但看起来你混淆了关于过滤器的主题位置菜单项。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主题位置。

于 2014-09-22T12:41:40.100 回答
0

我认为 WordPress 不会像您在此处描述的那样使用相同的菜单块处理两个不同的菜单。因此,它仅将您的脚本应用于两个菜单中的第一个。

我宁愿建议您将菜单 slug 更改为:

  • 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');
于 2014-09-22T12:08:05.713 回答