Вопрос или проблема
Я изучаю WordPress и не могу понять, что я делаю не так с темой, которую создаю. Вот как я создаю свои меню в файле functions.php
function my_custom_theme_setup() {
add_theme_support('menus');
register_nav_menu('header', 'Меню, которое размещается в заголовке вебсайта');
register_nav_menu('footer', 'Меню, которое размещается в подвале вебсайта');
}
add_action('init', 'my_custom_theme_setup');
А вот как я вставляю его в header.php
: <?php wp_nav_menu(array('menu' => 'header','menu_class' => 'header__nav'));?>
Вот как я настроил меню в интерфейсе администратора:
Да, содержимое обоих меню разное. Меню в подвале в порядке, но с заголовочным что-то не так. Что я делаю не так?
Вот что решило проблему:
<?php wp_nav_menu(array('theme_location' => 'header','menu_class' => 'header__nav'));?>
Ответ или решение
Ошибка, с которой вы столкнулись при использовании функции wp_nav_menu
, связана с некорректным указанием параметра, который отвечает за вывод определенного меню в вашей теме WordPress. Давайте внимательно рассмотрим, почему это происходит и как вы можете решить данную проблему, делая акцент на контексте и деталях.
Теория
В WordPress функция wp_nav_menu
используется для отображения навигационных меню, которые вы регистрируете в своей теме. Основной параметр, который необходимо использовать для указания, какое меню выводить, — это 'theme_location'
, а не 'menu'
. theme_location
соответствует уникальному имени, которое вы задали при регистрации меню с помощью функции register_nav_menu
.
Пример
Исходно вы зарегистрировали меню в файле functions.php
следующим образом:
function my_custom_theme_setup() {
add_theme_support('menus');
register_nav_menu('header', 'Menu that goes in the header of the website');
register_nav_menu('footer', 'Menu that goes in the footer of the website');
}
add_action('init', 'my_custom_theme_setup');
Здесь вы задали два уникальных идентификатора для меню: 'header'
и 'footer'
.
Затем вы попытались вывести меню в header.php
с использованием:
<?php wp_nav_menu(array('menu' => 'header','menu_class' => 'header__nav'));?>
Применение
Как видно из решения проблемы, исправлено это было путем замены параметра 'menu'
на 'theme_location'
:
<?php wp_nav_menu(array('theme_location' => 'header','menu_class' => 'header__nav')); ?>
Таким образом, используя 'theme_location'
вместо 'menu'
, вы правильно указали системе, что именно меню с уникальным идентификатором 'header'
должно быть выведено в данном месте. Применение данного изменения обеспечит корректную работу навигации и позволит избежать путаницы.
Заключение
При работе с навигацией в WordPress важно точно следовать конвенциям, определяемым функциями системы. Использование правильных параметров не только облегчает процесс создания тем, но и предотвращает непредвиденные ошибки в отображении контента. Как видно из вашего опыта, уточнение небольших деталей может существенно помочь в решении проблем.