Инструкция для классической PHP-темы WordPress: зарегистрируем позиции меню, назначим им меню в админке и выведем их через wp_nav_menu(). В блочной теме навигация настраивается через блок «Навигация».
1. Регистрация меню в functions.php:
Сначала нужно зарегистрировать меню, чтобы его можно было использовать в теме. Для этого в файле functions.php добавь следующий код:
function mytheme_register_menus() {
register_nav_menus(
array(
'header-menu' => __( 'Header Menu' ),
'footer-menu' => __( 'Footer Menu' )
)
);
}
add_action( 'after_setup_theme', 'mytheme_register_menus' );
Код регистрирует две позиции: header-menu и footer-menu. Названия позиций должны совпадать со значениями theme_location при выводе меню.
2. Добавление меню в админке WordPress:
После регистрации меню ты сможешь создать меню через админ-панель WordPress, перейдя в раздел Внешний вид > Меню. Здесь можно создать новое меню и привязать его к зарегистрированным позициям, таким как Header Menu или Footer Menu. Добавь ссылки и сохрани меню.

3. Вывод меню в теме:
Чтобы вывести меню на сайте, открой нужный шаблон (например, header.php или footer.php) и добавь следующий код:
<?php
wp_nav_menu( array(
'theme_location' => 'header-menu', // Или 'footer-menu', если выводим меню в подвале
'container' => 'nav', // Контейнер для меню (например, <nav>)
'container_aria_label' => 'Основная навигация',
'fallback_cb' => false, // Не выводить список страниц вместо неназначенного меню
'container_class'=> 'main-menu', // Класс контейнера (если нужно)
'menu_class' => 'menu-list', // Класс для <ul> меню
) );
?>
Основные аргументы wp_nav_menu:
wp_nav_menu( array(
'theme_location' => 'header-menu', // (string) Расположение меню, зарегистрированное с помощью register_nav_menus(). Пример: 'header-menu'.
'menu' => '', // (string) Название меню или объект WP_Term. Пример: 'Главное меню'.
'container' => 'div', // (string|false) HTML-контейнер для меню. По умолчанию 'div'. Установите в false, чтобы отключить контейнер.
'container_class' => '', // (string) Класс контейнера меню. Пример: 'menu-container'.
'container_aria_label' => 'Основная навигация', // Название навигации, когда container = nav.
'container_id' => '', // (string) ID контейнера меню. Пример: 'main-menu-container'.
'menu_class' => 'menu', // (string) Класс ul-списка меню. Пример: 'menu'.
'menu_id' => '', // (string) ID ul-списка меню. Пример: 'main-menu'.
'echo' => true, // (bool) Выводить (true) или возвращать (false). По умолчанию true.
'fallback_cb' => 'wp_page_menu',// (callback|false) Функция обратного вызова для меню по умолчанию. Установите в false, чтобы отключить.
'before' => '', // (string) Текст перед ссылками меню. Пример: '<span>'.
'after' => '', // (string) Текст после ссылок меню. Пример: '</span>'.
'link_before' => '', // (string) Текст перед анкором каждой ссылки. Пример: '<span>'.
'link_after' => '', // (string) Текст после анкора каждой ссылки. Пример: '</span>'.
'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>', // (string) Формат обертки элементов меню. По умолчанию '<ul id="%1$s" class="%2$s">%3$s</ul>'.
'item_spacing' => 'preserve', // (string) Как обрабатывать пробелы в HTML-коде. 'preserve' или 'discard'.
'depth' => 0, // (int) Максимальная глубина вложенных уровней. 0 - неограниченно.
'walker' => '', // (object) Кастомный объект Walker для создания меню.
) );
4. Если меню не отображается:
Если меню не появилось, проверь совпадение theme_location, назначение позиции в админке и наличие пунктов. В коротком примере fallback_cb отключён: без назначенного меню ничего не выводится. По умолчанию WordPress может вывести список страниц через wp_page_menu().
Для меню в подвале укажи footer-menu, подходящий container_aria_label и класс контейнера footer-menu. Далее можно добавить классы пунктам и ссылкам. Отдельные ссылки в шаблоне разобраны в статье про URL WordPress.