leotoleo
@leotoleo
Верстаю на html css js

Как сделать на сайте 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' ),
		)
	);

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' ),
		)
	);

3. Далее хочу вывести в header.php:

<?php
				wp_nav_menu(
					array(
						'theme_location' => 'menu-2',
						'menu_id'        => 'primary-menu',
					)
				);
				?>

4. В админке меню закрепил за нужными областями:

65d20fc4bfb3b529361786.png
Но меню второе не выводится. Выводится оно только, когда я в админке в область Primary выберу menu-2.
Почему же не выводится сразу menu-2?
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
leotoleo
@leotoleo Автор вопроса
Верстаю на html css js
Код рабочий, вопрос неактуальный
<?php
wp_nav_menu(
array(
'theme_location' => 'menu-2',
'menu_id' => 'primary-menu',
)
);
?>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
pLavrenov
@pLavrenov
Разработка сайтов
У тебя указан 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' => '',
]);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы