Проблема расположения меню навигации WPML

Контекст

Я пытался добавить пользовательские ссылки для переключения языков в навигацию. Проблема в том, что у меня есть два пункта меню header-main и footer-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, фильтр не срабатывает.

Кроме того, есть два отдельных меню, одно для Arabic и одно для English, но расположение обоих одинаковое, т.е. header-main


person Syed Qarib    schedule 11.09.2014    source источник


Ответы (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.

person birgire    schedule 22.09.2014

Я не думаю, что WordPress обрабатывает два разных меню с одним и тем же слагом меню, как вы описываете здесь. Поэтому он применяет ваш сценарий только к первому из двух меню.

Я бы посоветовал вам изменить слаги меню на что-то вроде:

  • 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');
person Ole Haugset    schedule 22.09.2014
comment
Я определил только одно расположение меню для меню заголовка, то есть «header-main».. WPML подбирает его сам и разделяет меню на арабский и английский (или по количеству активированных языков). - person Syed Qarib; 22.09.2014