Для начала нам потребуется включить возможность создания пользовательских меню в нашей теме. Для этого откроем файл functions.php в папке с темой и добавим туда вызов функции register_nav_menus, в котором будет массив с названиями мест, куда может быть встроено наше меню код:
<?php
register_nav_menus(array(
'top' => 'Верхнее меню',
'bottom' => 'Нижнее меню'
));
Функция "register_nav_menus" регистрирует меню. Сами меню настраиваются в панели администрировани и в дальнейшем будут выводиться в шаблоне с помощью функции "wp_nav_menu".Таким образом мы зарегистрировали два меню с идентификаторами "top" и "bottom". Теперь перейдём в панель администрирования. В закладке "Внешний вид" - "Меню" найдите вкладку "Управление областями". Вы увидите в списке название "Верхнее меню" и "Нижнее меню" - это области темы, которые мы зарегистрировали под меню ранее с помощью функции "register_nav_menus". В выпадающих списках выберите меню, которые необходимо отображать в этих областях. Чтобы создать сами меню и настроить пункты используйте закладку "Редактировать меню". В ней создайте меню и сохраните его. Затем вернитесь на вкладку "Управление областями" и выберите созданное меню для отображения в нужной области.
После окончания изменения меню в панели администрирования попробуем добавить его в тему сайта. Для этого откройте нужный файл шаблона и добавьте в него следующий PHP код с вызовом функции "wp_nav_menu":
<?php
wp_nav_menu(array(
'theme_location' => '', // (строка) Расположение меню в шаблоне. Ключ, под которым было зарегистрировано меню в функции register_nav_menus (в нашем случае это "top" или "bottom")
'menu' => '', // (строка) Название выводимого меню. Если не указать, то берётся название из панели администрирования. Если указано, то параметр 'theme_location' игнорируется. Можно вместо названия указывать id меню - целое число.
'container' => 'div', // (строка - название тега) Чем обрамляется меню. Если не указано, то это тег div.
'container_class' => '', // (строка) содержание атрибута class контейнера (div тега)
'container_id' => '', // (строка) id контейнера (div тега)
'menu_class' => 'menu', // (строка) содержание атрибута class меню (списка ul)
'menu_id' => '', // (строка) id меню (списка ul)
'echo' => true, // (логическая) Выводить меню (при значении "true") или возвращать код вывода в переменную (при значении "false").
'fallback_cb' => 'wp_page_menu', // (строка) Резервная функция, если меню не существует
'before' => '', // (строка) Текст перед каждым пунктом меню
'after' => '', // (строка) Текст после каждого пункта меню
'link_before' => '', // (строка) Текст перед анкором ссылки
'link_after' => '', // (строка) Текст после анкора ссылки
'depth' => 0, // (целое число) Глубина вложенности (0 - нет ограничений, 2 - два уровня меню)
'walker' => '', // (объект) Класс собирающий меню. По умолчанию объект класса Walker_Nav_Menu
));
Пустые параметры можно не указывать, поэтому код выше можно переписать так:
<?php
wp_nav_menu(array(
'theme_location' => 'top',
'container' => 'div',
));
Проверка существования регистрации меню
В WordPress есть функция has_nav_menu, которая проверяет было ли зарегистрировано меню по заданному идентификатору (в нашем случае значения "top" и "bottom"). Эту функцию часто используют при выведении меню. К примеру, так:<?php
if(has_nav_menu('top')){
wp_nav_menu(array(
'theme_location' => 'top',
'container' => 'div',
));
}else{
echo 'Ошибка: меню не было зарегистрировано!';
}