Вопрос или проблема
У меня возникла странная проблема. У меня есть 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
.
Анализ проблемы и шаги по устранению:
-
Проверка регистрации меню в
functions.php
:
Начните с того, чтобы убедиться, что меню действительно зарегистрированы правильно. В вашем коде используются две регистрации:add_theme_support('menus'); register_nav_menu('primary', 'Top Nav'); register_nav_menu('footer', 'Footer');
Убедитесь, что функция
add_theme_support('menus')
вызывается до функцииregister_nav_menu()
, чтобы активировать поддержку меню в теме. -
Уточнение параметров вызова
wp_nav_menu
:
Основной инструмент для вывода меню — функцияwp_nav_menu()
. В вашем случае важно проверить параметры:theme_location
: Эта опция должна совпадать с зарегистрированным именем меню. В примере, представляющем проблему, передан параметрprimary
, который правильный.menu
: Этот параметр может сбивать с толку. Он указывает на конкретное меню по имени, как оно зарегистрировано в админке. Если вы используетеtheme_location
, обычно необходимости вmenu
нет.- Проверьте отсутствие конфликтов между значениями параметров
theme_location
иmenu
.
Следует избегать избыточности в вызовах: если используете
theme_location
, можно опуститьmenu
. -
Убедитесь в корректной настройке меню в админке WordPress:
Проверьте в панели администратора (Внешний вид → Меню), что нужные меню назначены на соответствующие позиции:Top Nav
дляprimary
иFooter
дляfooter
. -
Дебаггер или сообщения об ошибках:
ИспользуйтеWP_DEBUG
для выявления возможных скрытых ошибок, которые могут мешать корректной работе:define('WP_DEBUG', true);
-
Проверка кастомных
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
.