Как добавить два меню на сайт с использованием WordPress?

Как правильно вывести два разных меню (на русском и английском) в шапке сайта на WordPress?
  • 18 февраля 2024 г. 14:18
Ответы на вопрос 2
Для добавления двух разных меню на сайт с использованием WordPress, вам нужно следовать следующим шагам:

1. Создайте два разных меню в разделе "Внешний вид" -> "Меню" в админ-панели WordPress. Дайте каждому меню уникальное название, например, "Меню на русском" и "Меню на английском".

2. Добавьте ссылки на страницы или категории в каждое из созданных вами меню.

3. Далее необходимо определить местоположение для каждого из меню. Для этого перейдите в раздел "Внешний вид" -> "Настройки" и выберите нужное местоположение для каждого из своих меню.

4. Добавьте код для вывода меню на вашем сайте. Для вывода меню на русском языке используйте функцию wp_nav_menu() с указанием названия меню, например:
wp_nav_menu(array('menu' => 'Меню на русском'));

Для вывода меню на английском языке используйте ту же функцию, но уже для меню с другим названием:
wp_nav_menu(array('menu' => 'Меню на английском'));

5. Разместите этот код в нужном месте вашего сайта, обычно это делается в файле header.php, чтобы меню появилось в шапке сайта.

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

Что сделать:
В админке во вкладке "Управление областями" оставить поле "Назначенное меню" пустым.
Там в редакторе меню выбрать в какой позиции выводить это меню. (Область отображения)
Убрать menu_id.

Ниже пример для 99% случаев:
register_nav_menus([
    'top' => 'Верхнее',
]);
wp_nav_menu([
    'theme_location' => 'top',
    'container'=> false,
    'menu_class' => 'nav ',
    'menu_id' => '',
    'fallback_cb' => false   
]);

Нужно понимать что выводится не меню а его позиция, через админку указывается связь, позиции и меню. в wp_nav_menu() можно указать какое именно надо, в документации описан приоритет.

А это решение для остального процента:
## Добавление стилей для стандартного меню
add_filter('nav_menu_css_class', 'add_menu_list_item_class', 1, 3);
function add_menu_list_item_class($classes, $item, $args) {
    if (property_exists($args, 'li_class') && !$item->menu_item_parent) {
        $classes[] = $args->li_class;
    }
    if (property_exists($args, 'li_child_class') && $item->menu_item_parent) {
        $classes[] = $args->li_child_class;
    }
    return $classes;
}

add_filter( 'nav_menu_link_attributes', 'add_menu_link_class', 1, 3 );
function add_menu_link_class( $atts, $item, $args ) {
    if ( strpos( $atts['href'], home_url() ) === false ) {
        $atts['target'] = '_blank';
    }
    if (property_exists($args, 'a_class') && !$item->menu_item_parent) {
        $atts['class'] = $args->a_class;
    }
    if (property_exists($args, 'a_child_class') && $item->menu_item_parent) {
        $atts['class'] = $args->a_child_class;
    }
    return $atts;
}
add_filter( 'nav_menu_submenu_css_class', 'my_nav_menu_submenu_css_class', 1, 3);
function my_nav_menu_submenu_css_class($classes, $args, $depth) {
    if (property_exists($args, 'ul_child_class')) {
        $classes[] = $args->ul_child_class;
    }
    return $classes;
}
wp_nav_menu([
    'theme_location' => 'bottom',
    'container'=> false,
    'menu_class' => '',
    'menu_id' => '',
    'fallback_cb' => false,
    'a_class' => '',
    'a_child_class' => '',
    'li_class' => '',
    'li_child_class' => '',
    'ul_child_class' => '',
]);
Похожие вопросы