Вопрос или проблема
Я хочу иметь возможность назначать несколько меню для одного местоположения навигации.
Но когда я хочу назначить вторую навигацию, предыдущая перестаёт быть назначенной.
Как это можно сделать, не нарушая основные файлы WordPress?
Вот что я пытаюсь сделать: Как я могу отображать меню только на определённых страницах?
Это похоже на меню, которое вы стремитесь создать?
Вот как его создать
Создайте пользовательское меню в файле functions.php,
// основное меню
function main_nav()
{
wp_nav_menu(
array(
'theme_location' => 'header-menu',
'menu' => '',
'container' => 'div',
'container_class' => '',
'container_id' => '',
'menu_class' => 'menu',
'menu_id' => '',
'echo' => true,
'fallback_cb' => 'wp_page_menu',
'before' => '',
'after' => '',
'link_before' => '',
'link_after' => '',
'items_wrap' => '%3$s
',
'depth' => 0,
'walker' => ''
)
);
}
// дополнительное меню
function menu_extra_nav()
{
wp_nav_menu(
array(
'theme_location' => 'extra-menu',
'menu' => '',
'container' => 'div',
'container_class' => '',
'container_id' => '',
'menu_class' => 'menu',
'menu_id' => '',
'echo' => true,
'fallback_cb' => 'wp_page_menu',
'before' => '',
'after' => '',
'link_before' => '',
'link_after' => '',
'items_wrap' => '%3$s
',
'depth' => 0,
'walker' => ''
)
);
}
Создайте Основное Меню и Дополнительное Меню в Внешний вид > Меню
Затем добавьте меню в желаемое место, например, я размещаю его в основном навигационном заголовке
<nav class="nav" role="navigation">
<?php main_nav(); ?>
<?php menu_extra_nav(); ?>
</nav>
Затем определите основное и дополнительное меню в Внешний вид > Темы > Настроить > Навигация
Ответ или решение
Для решения проблемы, связанной с одновременным назначением нескольких меню в одной локации навигации в WordPress, можно воспользоваться несколькими методами, не нарушая при этом целостности файлов ядра платформы. Ниже представлен подробный алгоритм действий:
Понимание задачи
Вы хотите иметь возможность назначать несколько меню в одном месте навигации, но при попытке назначить второе меню, первое становится неактивным. Такое поведение связано с тем, что стандартный функционал WordPress не поддерживает множественные назначения в одной навигационной зоне, поскольку каждая зона может иметь только одно закреплённое меню.
Решение проблемы
Шаг 1: Регистрация дополнительных зон меню
Регистрация нескольких навигационных зон может позволить гибко управлять отображением меню. Для этого добавьте следующий код в файл functions.php
вашей темы:
function register_my_menus() {
register_nav_menus(
array(
'header-menu' => __( 'Header Menu' ),
'extra-menu' => __( 'Extra Menu' )
)
);
}
add_action( 'init', 'register_my_menus' );
Шаг 2: Создание собственных функций для отображения меню
Создайте функции для отображения каждого меню. Например, в случае с основным и дополнительным меню:
function main_nav() {
wp_nav_menu(
array(
'theme_location' => 'header-menu',
'container' => 'div',
'menu_class' => 'menu',
'items_wrap' => '<ul>%3$s</ul>',
'depth' => 0,
'walker' => ''
)
);
}
function menu_extra_nav() {
wp_nav_menu(
array(
'theme_location' => 'extra-menu',
'container' => 'div',
'menu_class' => 'menu',
'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>',
'depth' => 0,
'walker' => ''
)
);
}
Шаг 3: Интеграция меню в шаблон
После создания функций и регистрации меню, необходимо разместить вызовы этих функций в желаемом месте вашего шаблона, например, в файле header.php
:
<nav class="nav" role="navigation">
<?php main_nav(); ?>
<?php menu_extra_nav(); ?>
</nav>
Шаг 4: Управление отображением на страницах
Если вы хотите, чтобы меню отображалось только на определённых страницах, используйте условные теги WordPress. Например:
if (is_front_page()) {
main_nav();
} else if (is_page('about-us')) {
menu_extra_nav();
}
Заключение
Данный подход позволяет гибко использовать несколько меню в одной навигационной зоне без необходимости изменения файлов ядра WordPress, обеспечивая высокую степень персонализации и управления. Использование стандартных функций и хуков WordPress гарантирует, что ваши изменения будут устойчивы к обновлениям системы.