Как сделать на сайте wp 2 меню?
Сайт сверстан и поставлен на wp. Тема чистая, генерировал на https://underscores.me/
Появилась необходимость сделать 2 разных меню (на русском и на английском)
Второе меню зарегистрировал, но вывести его в шапке для теста даже не получается.
1. В исходном файле functions.php был код:
// This theme uses wp_nav_menu() in one location. register_nav_menus( array( 'menu-1' => esc_html__( 'Primary', 'copini' ), ) ); |
// This theme uses wp_nav_menu() in one location. register_nav_menus( array( 'menu-1' => esc_html__( 'Primary', 'copini' ), ) );
2. Меню зарегистрировано, поэтому я просто строчку добавляю:
// This theme uses wp_nav_menu() in one location. register_nav_menus( array( 'menu-1' => esc_html__( 'Primary', 'copini' ), 'menu-2' => esc_html__( 'Secondary', 'copini' ), ) ); |
// This theme uses wp_nav_menu() in one location. register_nav_menus( array( 'menu-1' => esc_html__( 'Primary', 'copini' ), 'menu-2' => esc_html__( 'Secondary', 'copini' ), ) );
3. Далее хочу вывести в header.php:
<?php wp_nav_menu( array( 'theme_location' => 'menu-2', 'menu_id' => 'primary-menu', ) ); ?> |
<?php wp_nav_menu( array( 'theme_location' => 'menu-2', 'menu_id' => 'primary-menu', ) ); ?>
4. В админке меню закрепил за нужными областями:
Но меню второе не выводится. Выводится оно только, когда я в админке в область Primary выберу menu-2.
Почему же не выводится сразу menu-2?
Дополнительно:
Код рабочий, вопрос неактуальный
<?php
wp_nav_menu(
array(
'theme_location' => 'menu-2',
'menu_id' => 'primary-menu',
)
);
?>
Ответы:
У тебя указан 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 ]); |
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' => '', ]); |
## Добавление стилей для стандартного меню 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' => '', ]);
- pLavrenov спасибо большое за желание помочь! Это очень ценная информация. Вопрос снят, код рабочий, на хостинге были технические неполадки((( а я голову сломал((
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

