Несколько навигационных меню к местоположению?

Вопрос или проблема

Я хочу иметь возможность назначать несколько меню для одного местоположения навигации.

Но когда я хочу назначить вторую навигацию, предыдущая перестаёт быть назначенной.

Как это можно сделать, не нарушая основные файлы 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 гарантирует, что ваши изменения будут устойчивы к обновлениям системы.

Оцените материал
Добавить комментарий

Капча загружается...