Меню WordPress
Оригинальное название: WordPress menu
Коротко
Набор навигационных ссылок, который собирают в админке из страниц, рубрик и произвольных адресов и выводят в отведённых темой местах — шапке, подвале, боковой колонке.
Что такое «Меню WordPress»
В классических темах меню собирают в разделе «Внешний вид → Меню» или в настройщике: добавляют страницы, рубрики, записи и ссылки, перетаскивают их и сдвигают вправо для вложенности. Одно меню можно назначить в одну или несколько областей, которые объявила тема.
Внутри всё устроено на стандартных механизмах. Само меню — термин служебной таксономии nav_menu, каждый пункт — запись типа nav_menu_item, а адрес, родитель и тип связанного объекта хранятся в её метаданных. Привязка меню к областям сохраняется в настройках конкретной темы, поэтому после смены темы меню остаются в базе, но их приходится заново назначать в области.
Пример: область в шапке
// functions.php
add_action( 'after_setup_theme', function () {
register_nav_menus( [ 'header' => 'Меню в шапке' ] );
} );
// header.php
wp_nav_menu( [
'theme_location' => 'header',
'container' => false,
'depth' => 2,
] );
Параметр depth ограничивает вложенность: даже если редактор добавит третий уровень, тема его не выведет и вёрстка не развалится. Активный пункт получает классы current-menu-item и current-menu-ancestor, на них строят подсветку текущего раздела.
В блочных темах
Там меню собирают прямо в редакторе сайта с помощью блока навигации. Его содержимое хранится в отдельном типе записей wp_navigation. При первом добавлении блок предлагает импортировать существующее классическое меню, так что при переходе на блочную тему структуру не нужно собирать заново.
Почему пропадают пункты
Классическая проблема большого меню: после сохранения исчезает хвост списка. Каждый пункт передаёт на сервер около десятка полей формы, а PHP по умолчанию принимает не больше 1000 переменных за запрос — лимит max_input_vars. Меню на сотню пунктов в него уже не помещается. Помогает увеличение лимита в настройках PHP или разбиение одного огромного меню на несколько.

