WordPress Меню: Полное техническое руководство по архитектуре навигации
Меню WordPress — это структурированная коллекция навигационных ссылок, отображаемых в виде HTML-элементов <nav>, которые соединяют посетителей со страницами, записями, категориями, пользовательскими URL или таксономиями на вашем сайте. Они регистрируются темами с помощью register_nav_menus() и управляются через административный интерфейс WordPress или Настройщик, предоставляя владельцам сайтов полный контроль над иерархией навигации без необходимости редактировать код.
Для большинства установок WordPress меню являются основной системой навигации. Их правильная настройка влияет не только на пользовательский опыт, но и на эффективность обхода сайта, распределение внутреннего ссылочного веса и то, как поисковые системы интерпретируют иерархию контента вашего сайта.
Как на самом деле работают меню WordPress изнутри
Прежде чем обращаться к панели администратора, полезно понять архитектуру. Меню WordPress функционируют через три взаимосвязанных уровня:
- Регистрация темой: Тема объявляет доступные расположения меню с помощью
register_nav_menus()внутриfunctions.php. Без этого вызова на экране администратора «Меню» не отображаются назначаемые расположения. - Хранение в базе данных: Элементы меню хранятся как пользовательский тип записи (
nav_menu_item) вwp_posts, а связи управляются черезwp_term_relationships. Каждый элемент содержит метаданные: URL, метку, ID родителя и позицию. - Отображение в шаблоне: Тема вызывает
wp_nav_menu()в файлах шаблонов, передавая аргументtheme_location. WordPress определяет назначенное меню, строит дерево элементов и выводит семантический HTML.
Понимание этого позволяет точно знать, где искать проблему при сбое — отсутствующий вызов wp_nav_menu() в шаблоне, тема, которая никогда не регистрировала расположение, или повреждённая связь термина в базе данных.
Шаг 1: Доступ к менеджеру меню WordPress
Войдите в панель управления WordPress и перейдите в раздел Внешний вид > Меню. Этот экран является центральной панелью управления для всех операций с меню.
Если вы не видите меню Внешний вид на боковой панели, ваша роль пользователя, вероятно, не имеет возможности edit_theme_options. Требуется учётная запись администратора.
Альтернативный путь через Настройщик:
Перейдите в Внешний вид > Настроить > Меню. Этот путь предоставляет панель предварительного просмотра в реальном времени рядом с редактором, что удобно для визиального позиционирования, но предлагает меньше возможностей массового редактирования, чем специальный экран «Меню».
Шаг 2: Создание нового меню
На экране «Меню» нажмите ссылку «Создать меню» в верхней части страницы.
- Введите описательное внутреннее название — например,
Primary Navigation,Footer Legal LinksилиMobile Sidebar. Это название никогда не отображается посетителям; оно существует исключительно для вашего удобства при управлении несколькими меню. - Нажмите Создать меню.
Рекомендуется называть меню по их функции и расположению, а не использовать общие метки вроде «Меню 1». Когда сайт вырастает до пяти-шести меню, чёткие названия предотвращают дорогостоящие ошибки при назначении.
Шаг 3: Добавление элементов в меню
Левая панель на экране «Меню» отображает все доступные типы контента, которые можно добавить в качестве элементов меню.
Страницы
Установите флажки рядом с существующими страницами (например, «Главная», «О нас», «Услуги», «Контакты») и нажмите Добавить в меню. По умолчанию WordPress показывает только самые последние страницы. Нажмите Просмотреть все, чтобы увидеть полный список, или используйте вкладку Поиск, чтобы найти конкретную страницу по заголовку.
Записи и пользовательские типы записей
Отдельные записи можно добавить таким же образом. Если ваша тема или плагин регистрирует пользовательские типы записей (например, portfolio, product), эти типы записей отображаются в виде отдельных панелей — при условии, что они были зарегистрированы с show_in_nav_menus => true.
Категории и метки
Термины таксономий — мощные элементы меню для сайтов с большим количеством контента. Добавление ссылки на категорию направляет посетителей на страницу архива этой категории, автоматически отображая все связанные записи. Это особенно эффективно для новостных сайтов или блогов с несколькими тематиками, где контент организован по темам.
Произвольные ссылки
Произвольные ссылки принимают любой URL — внутренний или внешний — в паре с текстом ссылки по вашему выбору. Варианты использования включают:
- Ссылка на поддомен или внешний инструмент
- Создание элемента-заполнителя родительского уровня (используйте
#в качестве URL), который служит триггером выпадающего меню без собственного назначения - Ссылка на якорные цели внутри страницы (например,
https://example.com/about/#team)
Чтобы добавить произвольную ссылку:
- Разверните панель Произвольные ссылки.
- Введите полный URL в поле URL.
- Введите видимую метку в поле Текст ссылки.
- Нажмите Добавить в меню.
Шаг 4: Организация структуры и иерархии меню
После того как элементы появятся в конструкторе меню справа, вы управляете порядком и иерархией с помощью перетаскивания.
Изменение порядка элементов
Нажмите и удерживайте любой элемент меню, затем перетащите его вверх или вниз, чтобы изменить его положение. Крайние левые элементы отображаются первыми в горизонтальных навигационных панелях.
Создание подменю (выпадающая навигация)
Перетащите элемент меню немного вправо и под другой элемент. Появится визуальный отступ, указывающий на отношение «родитель-дочерний элемент». Элемент с отступом становится записью подменю, которая отображается в выпадающем списке под родительским элементом.
Можно создавать несколько уровней вложенности, хотя большинство тем стилизуют только два или три уровня. Сверх этого поддержка CSS и JavaScript варьируется, а пользовательский опыт ухудшается на мобильных устройствах.
Редактирование отдельных элементов меню
Нажмите стрелку с правой стороны любого элемента меню, чтобы развернуть его настройки:
- Метка навигации: Текст, отображаемый в отрисованном меню (независимо от заголовка страницы).
- Атрибут title: Заполняет HTML-атрибут
titleтега якоря — полезен для доступности, но часто избыточен, если метка уже достаточно описательна. - Открывать ссылку в новой вкладке: Добавляет
target="_blank"и, что важно, WordPress автоматически добавляетrel="noopener noreferrer"для предотвращения обратного перехвата вкладки. - CSS-классы: Добавление пользовательских классов к отдельным элементам для точечного стилизования.
- Связь ссылки (XFN): Редко используется в современных рабочих процессах; позволяет определить отношение между вами и целевым объектом ссылки с помощью микроформатов XFN.
- Описание: Некоторые темы отображают краткое описание под меткой меню. Большинство — нет.
Примечание: Поля CSS-классов и описания скрыты по умолчанию. Чтобы их отобразить, нажмите Настройки экрана в правом верхнем углу страницы «Меню» и включите соответствующие флажки.
Шаг 5: Назначение меню расположению в теме
Создание меню не делает его видимым на вашем сайте. Необходимо назначить его зарегистрированному расположению темы.
Прокрутите до раздела Настройки меню в нижней части конструктора меню и установите флажок рядом с нужным расположением — обычно обозначенным как Основное меню, Дополнительное меню, Меню подвала или Меню социальных ссылок, в зависимости от того, что регистрирует ваша активная тема.
Нажмите Сохранить меню.
Если ожидаемое расположение темы отсутствует, тема его не зарегистрировала. Вы можете программно проверить зарегистрированные расположения:
print_r( get_registered_nav_menus() );Запустите это во временном файле шаблона или через плагин, например Query Monitor, чтобы проверить доступные расположения.
Назначение меню через Настройщик
Перейдите в Внешний вид > Настроить > Меню > Просмотреть все расположения. Каждое зарегистрированное расположение имеет выпадающий список, где вы выбираете, какое меню отображать. Изменения здесь предварительно просматриваются в реальном времени перед публикацией.
Шаг 6: Расширенная настройка меню
Добавление иконок к элементам меню
Большинство тем изначально не поддерживают иконки в элементах меню. Распространённые подходы:
- Псевдоэлементы CSS: Добавьте класс к элементу меню и используйте
::beforeили::afterв вашей таблице стилей для вставки иконки из библиотеки, например Font Awesome. - Метка навигации с HTML: Некоторые темы допускают HTML в поле метки навигации. Вы можете вставить тег
<i>или<svg>напрямую, хотя это ненадёжно и ломается, если тема санирует метки. - Выбор иконок через плагины: Плагины, такие как Max Mega Menu или WP Menu Icons, добавляют выбор иконок непосредственно в редактор элементов меню.
Мегаменю
Для крупных сайтов с глубокими иерархиями контента стандартные выпадающие меню становятся неудобными. Мегаменю отображает широкую многоколоночную панель вместо узкого вертикального списка. Реализация требует либо специального плагина, либо темы, которая изначально поддерживает этот паттерн. Структура меню в WordPress остаётся той же — разница заключается исключительно в том, как CSS и JavaScript темы отображают вложенные элементы.
Адаптивные и мобильные меню
Все современные темы сворачивают горизонтальную навигацию в кнопку-гамбургер на небольших экранах. Это поведение обрабатывается JavaScript и CSS темы, а не ядром WordPress. Если мобильное меню вашей темы сломано или недоступно, проблема почти всегда в файле navigation.js темы или в отсутствующем атрибуте ARIA на кнопке переключения.
Для соответствия требованиям доступности (WCAG 2.1 AA) кнопка переключения должна иметь:
- Атрибут
aria-expanded, переключаемый междуtrueиfalseпри нажатии - Атрибут
aria-controls, указывающий на ID контейнера меню - Видимый индикатор фокуса
Шаг 7: Меню в виджетизированных областях
Вы можете отображать любое сохранённое меню в боковой панели, области виджетов подвала или любой другой виджетизированной зоне.
Для классических виджетов (до WordPress 5.8):
- Перейдите в Внешний вид > Виджеты.
- Перетащите виджет Меню навигации в нужную область виджетов.
- Выберите меню из выпадающего списка и сохраните.
Для экрана виджетов блочного редактора (WordPress 5.8+):
- Перейдите в Внешний вид > Виджеты.
- Нажмите значок +, чтобы добавить блок.
- Найдите и вставьте блок Навигация или блок Произвольный HTML.
- Блок «Навигация» может ссылаться на существующее меню по имени.
Для тем с полным редактированием сайта (FSE):
В блочных темах традиционные меню заменяются блоком «Навигация» внутри редактора сайта (Внешний вид > Редактор). Блок «Навигация» использует те же данные меню, но управляется полностью в интерфейсе блочного редактора. Классический экран Внешний вид > Меню может вообще не отображаться в темах FSE.
Типы меню WordPress: сравнение
| Тип меню | Расположение | Лучший вариант использования | Поведение на мобильных | Требует плагин |
|---|---|---|---|---|
| Основная навигация | Шапка | Основные разделы сайта | Сворачивается в гамбургер | Нет |
| Меню подвала | Подвал | Юридические и дополнительные ссылки | Остаётся развёрнутым | Нет |
| Меню боковой панели | Область виджетов | Навигация по категориям, фильтры | Сворачиваемый аккордеон | Нет |
| Меню социальных ссылок | Шапка/Подвал | Иконки социальных профилей | Встроенные иконки | Нет |
| Мегаменю | Шапка | Крупные каталоги, корпоративные сайты | Пользовательская мобильная панель | Обычно да |
| Навигация по хлебным крошкам | Область контента | Глубокие иерархии, электронная коммерция | Встроенный текст | Обычно да |
Управление несколькими меню
WordPress поддерживает неограниченное количество сохранённых меню, но только одно меню может быть назначено каждому расположению темы одновременно. Практическая архитектура нескольких меню для типичного бизнес-сайта:
- Основное меню: Страницы услуг и контента верхнего уровня
- Меню подвала (колонка 1): Страницы компании и юридические страницы
- Меню подвала (колонка 2): Ссылки на поддержку и ресурсы
- Мобильное меню: Упрощённая версия основного меню с меньшим количеством элементов для более удобной навигации большим пальцем
- Меню панели управления/аккаунта: Актуально только если на сайте есть область для авторизованных пользователей
Для переключения между меню на экране «Меню» используйте выпадающий список Выберите меню для редактирования вверху и нажмите Выбрать.
Программное управление меню
Для разработчиков, управляющих WordPress в масштабе — особенно на VPS-хостинге или выделенных серверах, где развёртывания выполняются по скриптам — создание и назначение меню программным способом значительно надёжнее, чем ручные клики в административной панели.
Создание меню и его назначение расположению:
// Create the menu
$menu_id = wp_create_nav_menu( 'Primary Navigation' );
// Add a page item
wp_update_nav_menu_item( $menu_id, 0, array(
'menu-item-title' => 'Home',
'menu-item-url' => home_url( '/' ),
'menu-item-status' => 'publish',
'menu-item-type' => 'custom',
) );
// Assign to a theme location
$locations = get_theme_mod( 'nav_menu_locations' );
$locations['primary'] = $menu_id;
set_theme_mod( 'nav_menu_locations', $locations );Экспорт и импорт меню между окружениями с помощью WP-CLI:
# Export the full site (includes menu data in the WXR file)
wp export --path=/var/www/html --dir=/tmp/exports
# On the target server, import
wp import /tmp/exports/site.xml --authors=createWP-CLI также позволяет напрямую проверять назначения меню:
wp menu list
wp menu location list
wp menu location assign primary my-menu-slugЭто незаменимо при переносе установок WordPress между тестовой и производственной средой на VPS с cPanel или на чистом Linux-сервере.
Распространённые проблемы с меню и способы их устранения
Меню не отображается на фронтенде
- Меню было создано, но не назначено расположению темы. Перейдите в Внешний вид > Меню > Настройки меню и установите флажок расположения.
- Файл шаблона темы не вызывает
wp_nav_menu()для этого расположения. Проверьте файлheader.phpтемы или соответствующую часть шаблона. - Плагин кэширования отдаёт устаревшую страницу. Очистите кэш после сохранения меню.
Элементы меню показывают неправильный URL
- URL сайта изменился (например, после перехода с HTTP на HTTPS или переноса на новый домен). Элементы произвольных ссылок хранят абсолютные URL и должны обновляться вручную или через поиск-замену в базе данных:
wp search-replace 'http://olddomain.com' 'https://newdomain.com' --path=/var/www/htmlВыпадающие подменю не отображаются
- JavaScript темы для событий наведения или нажатия не загружается. Проверьте консоль браузера на наличие ошибок JS.
- Правило CSS скрывает контейнер подменю. Проверьте элемент и найдите
display: noneбез соответствующего состояния наведения/фокуса. - Элементы меню правильно вложены в административной панели, но тема поддерживает только один уровень вложенности.
Меню исчезает после смены темы
- Меню сохраняются в базе данных, но расположения тем меняются при смене темы. После переключения перейдите в Внешний вид > Меню и переназначьте ваши меню расположениям новой темы.
Соображения безопасности для навигации WordPress
Элементы меню, ссылающиеся на пользовательские или динамически формируемые URL, должны проверяться с той же тщательностью, что и любые другие входные данные. Конкретные риски:
- Открытое перенаправление через произвольные ссылки: Если ваш сайт программно формирует URL элементов меню из параметров запроса, проверяйте и санируйте входные данные. Функция WordPress
esc_url()должна оборачивать любой вывод URL. - Повышение привилегий через видимость меню: Некоторые плагины предлагают правила «видимости меню» (показывать этот элемент только авторизованным пользователям, администраторам и т.д.). Убедитесь, что эти правила применяются на стороне сервера, а не просто скрываются через CSS — скрытие ссылки в DOM не ограничивает доступ к целевой странице.
- XSS в метках навигации: WordPress санирует метки меню при выводе, но пользовательские реализации
wp_nav_menu()сitem_spacing => 'discard'или пользовательскими классамиwalkerмогут обходить стандартное экранирование. Всегда используйтеesc_html()илиesc_attr()в пользовательских walker-классах.
Поддержание актуальности установки WordPress, тем и плагинов — это базовая защита. Если вы запускаете WordPress на плане виртуального веб-хостинга, убедитесь, что ваш хостинг применяет правила WAF на уровне сервера, которые перехватывают распространённые паттерны инъекций, нацеленных на административный интерфейс.
SSL и целостность URL в меню
Если ваш сайт работает по HTTPS — а он должен, учитывая, что Google рассматривает HTTP как сигнал ранжирования — все URL элементов меню должны использовать схему https://. Предупреждения о смешанном контенте, вызванные единственной ссылкой http:// в меню, могут скрыть индикатор безопасного замка в браузере и подорвать доверие посетителей.
Убедитесь, что ваша конфигурация SSL корректна и что ваши SSL-сертификаты охватывают все поддомены, на которые ссылаются элементы вашего меню, особенно если вы ссылаетесь на поддомен вроде shop.example.com или docs.example.com.
После установки или обновления SSL-сертификата выполните полный аудит меню:
wp menu item list --menu=primary --fields=url --format=csv | grep "^http://"Любой результат этой команды — это элемент меню, который необходимо обновить до HTTPS.
Ключевые технические выводы
- Регистрируйте расположения меню в
functions.phpс помощьюregister_nav_menus()перед тем, как ожидать их появления в административной панели. - Назначайте меню расположениям — создание меню без назначения ничего не отображает на фронтенде.
- Используйте Настройки экрана, чтобы разблокировать поля CSS-классов, описания и связи ссылок в редакторе элементов меню.
- В темах с полным редактированием сайта управляйте навигацией через блок «Навигация» в редакторе сайта, а не через классический экран «Меню».
- Используйте команды WP-CLI
wp menuдля скриптовых развёртываний, миграций и массовых обновлений в нескольких окружениях. - После любой миграции домена или перехода с HTTP на HTTPS выполните поиск-замену URL элементов меню — произвольные ссылки хранят абсолютные пути.
- Проверяйте доступность мобильного меню:
aria-expanded,aria-controlsи управление фокусом клавиатуры не являются необязательными для соответствия требованиям. - Инвалидация кэша обязательна после каждого сохранения меню в производственных окружениях с объектным или страничным кэшированием.
- Пользовательские walker-классы в
wp_nav_menu()обходят стандартное экранирование — всегда явно применяйтеesc_html()иesc_url(). - Для многосредовых установок WordPress на панелях управления VPS используйте экспорт WP-CLI для надёжного переноса конфигураций меню, а не воссоздавайте их вручную.
Часто задаваемые вопросы
Можно ли иметь разные меню для мобильных и десктопных устройств на одном сайте WordPress?
Не нативно, только с помощью системы меню WordPress. Стандартный подход — зарегистрировать два расположения темы: одно для десктопа, одно для мобильных — назначить разные меню каждому и использовать медиазапросы CSS для отображения или скрытия соответствующего расположения. Некоторые плагины мегаменю обрабатывают это автоматически со встроенными панелями адаптивной конфигурации.
Почему в моём меню отображаются страницы, которые я не добавлял?
Если при создании меню вы установили флажок Автоматически добавлять новые страницы верхнего уровня в это меню, WordPress вставляет каждую вновь опубликованную страницу верхнего уровня в меню. Снимите этот флажок в разделе Настройки меню и сохраните, чтобы остановить это поведение.
В чём разница между расположением меню и меню?
Расположение меню — это слот, определённый темой (например, «Основное меню»). Меню — это фактическая коллекция ссылок, которую вы создаёте в административной панели. Вы назначаете меню расположению. Одно меню может быть назначено нескольким расположениям; одно расположение может содержать только одно меню одновременно.
Как добавить меню WordPress на страницу с помощью шорткода или блока?
Ядро WordPress не предоставляет нативный шорткод для меню. Самый чистый метод в блочном редакторе — вставить блок Навигация и выбрать сохранённое меню. В качестве альтернативы используйте функцию wp_nav_menu() в блоке «Произвольный HTML» с включённым выполнением PHP через плагин, или используйте плагин шорткодов, который оборачивает wp_nav_menu().
Влияет ли структура меню на SEO?
Да, косвенно, но ощутимо. Ссылки меню обходятся Googlebot и передают внутренний ссылочный вес своим целевым страницам. Страницы, на которые ссылается основная навигация, как правило, получают более высокий приоритет обхода и более сильные сигналы внутреннего PageRank. Размещение важных страниц за несколькими уровнями подменю снижает их эффективный ссылочный вес. Держите наиболее стратегически важные страницы в пределах одного-двух кликов от главной страницы через основное меню.
