Создал два меню для футера и хедера, как вывести их?
Добрый день, создал два меню для шапки и футера:
add_action('init', 'theme_register_nav_menu'); function theme_register_nav_menu() { register_nav_menus( array( 'header-primary' => __('Header menu'), 'footer-primary' => __('Footer menu') ) ); } |
add_action('init', 'theme_register_nav_menu'); function theme_register_nav_menu() { register_nav_menus( array( 'header-primary' => __('Header menu'), 'footer-primary' => __('Footer menu') ) ); }
Пытаюсь вывести одно в хедере другое в футере такими командами:
Футер
<?php wp_nav_menu(array('menu' => 'footer-primary')); ?> |
<?php wp_nav_menu(array('menu' => 'footer-primary')); ?>
Хедер
<?php wp_nav_menu(array('menu' => 'header-primary')); ?> |
<?php wp_nav_menu(array('menu' => 'header-primary')); ?>
Но и там и там выводится самое footer меню ( скорее всего выводится просто последнее созданное меню, а именно футер ). Может кто-то знает решение проблемы
Дополнительно
так а само меню вы создали привязяв к этим областям то?
bazliiii @bazliiii Автор вопроса В общем нужно было не header-primary, а название
<?php wp_nav_menu(array('menu' => 'header menu')); ?> |
<?php wp_nav_menu(array('menu' => 'header menu')); ?>
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Проблема в параметре, который передается в wp_nav_menu. При регистрации через register_nav_menus вы создаете не сами меню, а области меню темы. Ключи header-primary и footer-primary являются theme location, то есть местами вывода. Параметр menu работает иначе: он ищет конкретное меню по ID, slug или названию, которое создано в админке. Поэтому когда в menu передают ключ области, WordPress может подобрать не то меню или отработать fallback, и в результате в шапке и футере появляется один и тот же набор пунктов.
Правильная схема такая: сначала регистрируете две области меню, затем в админке создаете два меню и назначаете каждое меню в свою область, а в шаблонах выводите их через theme_location. Регистрировать меню лучше на after_setup_theme, потому что это этап настройки темы.
add_action('after_setup_theme', function () { register_nav_menus([ 'header-primary' => __('Header menu', 'theme'), 'footer-primary' => __('Footer menu', 'theme'), ]); });
В header.php выводите область шапки:
<?php wp_nav_menu([ 'theme_location' => 'header-primary', 'container' => 'nav', 'container_class' => 'header-nav', 'fallback_cb' => false, ]); ?>
В footer.php выводите область футера:
<?php wp_nav_menu([ 'theme_location' => 'footer-primary', 'container' => 'nav', 'container_class' => 'footer-nav', 'fallback_cb' => false, ]); ?>
После этого зайдите в админке в раздел меню и проверьте назначения: меню для шапки должно быть привязано к Header menu, меню для футера к Footer menu. Если используете классический интерфейс, это делается во Внешний вид, Меню, Управление областями. Если тема блочная, назначение может быть внутри редактора сайта и блока Navigation, но смысл тот же: у каждой области должен быть свой выбранный набор пунктов.
В вашем случае рабочее решение именно theme_location. Вариант с menu и названием меню тоже может сработать, но он менее удобен для темы: если администратор переименует меню, шаблон может перестать выводить нужный набор пунктов. Привязка через область стабильнее, потому что код зависит от технического ключа области, а не от пользовательского названия меню.