wp_nav_menu не выбирает правильное меню

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

У меня возникла странная проблема. У меня есть 2 меню, и я зарегистрировал их в functions.php следующим образом:

add_theme_support( 'menus' );
register_nav_menu( 'primary', 'Top Nav' );
register_nav_menu( 'footer', 'Footer' );

В заголовке у меня есть следующий код

<?php
    wp_nav_menu(array(
    'menu' => 'Top Nav',
    'theme_location' => 'primary',
    'depth' => 2,
    'container' => 'div',
    'container_class' => 'navbar-collapse collapse',
    'menu_class' => 'nav navbar-nav navbar-right',
    'fallback_cb' => 'wp_bootstrap_navwalker::fallback',
    'walker' => new wp_bootstrap_navwalker()
)); ?>

Однако в заголовке всегда отображается другое меню, назначенное для footer, независимо от того, что я делаю. Я пытался использовать menu и theme_location по отдельности, менять названия, добавлять другое местоположение и назначать меню этому новому местоположению, отменять назначение другого меню и всё, что мог придумать, но безуспешно. Ничего не помогает, кроме как удаления другого меню, что конечно же не вариант, так как я хочу оба из них.

На всякий случай, меню в footer вызывается так

<?php wp_nav_menu( array( 'theme_location' => 'footer' ) ); ?>

Есть идеи, что я делаю не так?

У меня была такая же проблема, и наконец я нашел ответ:

Для functions.php:

register_nav_menu( 'primary', __( 'Navigation Menu', 'Removemymug_Theme' ) );
register_nav_menu( 'second-menu', __( 'Second Menu', 'Removemymug_Theme' ) );

Для Второго Меню (Footer):

wp_nav_menu( array(
    'menu'            => 'second-menu',
    'theme_location'  => 'second-menu',
    'depth'           => 2,
    'container'       => 'div',
    'container_class' => 'navbar-collapse collapse',
    'menu_class'      => 'nav navbar-nav navbar-right',
    'fallback_cb'     => 'wp_bootstrap_navwalker::fallback',
    'walker'          => new wp_bootstrap_navwalker()
) );

Для Верхней Навигации:

wp_nav_menu( array(
    'menu'            => 'primary',
    'theme_location'  => 'primary',
    'depth'           => 2,
    'container'       => 'div',
    'container_class' => 'navbar-collapse collapse',
    'menu_class'      => 'nav navbar-nav navbar-right',
    'fallback_cb'     => 'wp_bootstrap_navwalker::fallback',
    'walker'          => new wp_bootstrap_navwalker()
) );

Ответ или решение

Для решения проблемы с неправильным отображением меню в WordPress, необходимо обратить внимание на несколько ключевых моментов в коде, связанных с функцией wp_nav_menu.

Анализ проблемы и шаги по устранению:

  1. Проверка регистрации меню в functions.php:
    Начните с того, чтобы убедиться, что меню действительно зарегистрированы правильно. В вашем коде используются две регистрации:

    add_theme_support('menus');
    register_nav_menu('primary', 'Top Nav');
    register_nav_menu('footer', 'Footer');

    Убедитесь, что функция add_theme_support('menus') вызывается до функции register_nav_menu(), чтобы активировать поддержку меню в теме.

  2. Уточнение параметров вызова wp_nav_menu:
    Основной инструмент для вывода меню — функция wp_nav_menu(). В вашем случае важно проверить параметры:

    • theme_location: Эта опция должна совпадать с зарегистрированным именем меню. В примере, представляющем проблему, передан параметр primary, который правильный.
    • menu: Этот параметр может сбивать с толку. Он указывает на конкретное меню по имени, как оно зарегистрировано в админке. Если вы используете theme_location, обычно необходимости в menu нет.
    • Проверьте отсутствие конфликтов между значениями параметров theme_location и menu.

    Следует избегать избыточности в вызовах: если используете theme_location, можно опустить menu.

  3. Убедитесь в корректной настройке меню в админке WordPress:
    Проверьте в панели администратора (Внешний вид → Меню), что нужные меню назначены на соответствующие позиции: Top Nav для primary и Footer для footer.

  4. Дебаггер или сообщения об ошибках:
    Используйте WP_DEBUG для выявления возможных скрытых ошибок, которые могут мешать корректной работе:

    define('WP_DEBUG', true);
  5. Проверка кастомных walker классов:
    Код использует wp_bootstrap_navwalker. Убедитесь, что данный класс подключен и определен верно в вашем проекте. Если этот класс вызывает ошибки, попробуйте временно убрать связанные с ним строки для диагностики.

Окончательное решение:

Измените подход так, чтобы использование параметра menu во всех функциях wp_nav_menu было последовательным или вовсе избегалось, если он не критичен:

wp_nav_menu(array(
    'theme_location'  => 'primary',
    'depth'           => 2,
    'container'       => 'div',
    'container_class' => 'navbar-collapse collapse',
    'menu_class'      => 'nav navbar-nav navbar-right',
    'fallback_cb'     => 'wp_bootstrap_navwalker::fallback',
    'walker'          => new wp_bootstrap_navwalker()
));

И для футера:

wp_nav_menu(array(
    'theme_location' => 'footer'
));

Заключение:

Следуя этим рекомендациям, вы сможете устранить проблему с некорректным отображением меню в вашем WordPress сайте. Основное внимание следует уделять правильной регистрации меню и тщательной проверке параметров функции wp_nav_menu.

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

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