wp_get_nav_menu_object() — возвращает объект меню

Возможно вы знаете, что каждое созданное меню в WordPress является элементом таксономии nav_menu. Функция wp_get_nav_menu_object() — это ни что иное, как совокупность функций get_term() и get_term_by().

wp_get_nav_menu_object( $menu )
$menu
(строка) ID, ярлык или название меню.

В случае успеха функция возвращает объект меню, в случае неудачи — логическое false. Вот результат действия кода print_r( wp_get_nav_menu_object( 381 ) ); для моего меню в шапке:

stdClass Object
(
    [term_id] => 381
    [name] => Меню для шапки
    [slug] => %d0%bc%d0%b5%d0%bd%d1%8e-%d0%b4%d0%bb%d1%8f-%d1%88%d0%b0%d0%bf%d0%ba%d0%b8
    [term_group] => 0
    [term_order] => 0
    [term_icon] => 
    [term_taxonomy_id] => 387
    [taxonomy] => nav_menu
    [description] => 
    [parent] => 0
    [count] => 11
    [filter] => raw
)

Теперь перейдем к примерам.

Как узнать ID меню

На самом деле тут есть два способа.

Способ 1. Смотрим исходный код

Итак, переходим в админке во Внешний вид > Меню, выбираем нужное нам меню, ID которого требуется узнать, затем заходим в исходный код в браузере (в разных браузерах и ОС это делается по-разному, но скорее всего должно помочь нажатие правой кнопкой мыши где-нибудь в теле веб-страницы).

Открыли код? Теперь ищем невидимое поле с атрибутом name равным menu. Значение атрибута value данного поля и есть ID меню.

ID меню

Способ 3. Определяем ID меню по его имени

Тут уже мы будем использовать функцию wp_get_nav_menu_object(). Допустим, что имя меню у нас «Меню для шапки», тогда:

$menu_object = wp_get_nav_menu_object( 'Меню для шапки' ); 
$menu_id = $menu_object->term_id;

Как узнать ярлык меню

Если известен ID:

$menu_object = wp_get_nav_menu_object( 381 ); 
$menu_slug = $menu_object->slug; // ярлык

Если известно название меню:

$menu_object = wp_get_nav_menu_object( 'Меню для шапки' ); 
$menu_slug = $menu_object->slug;

Как узнать количество элементов в меню

Понятное дело, можно их подсчитать, но я имею ввиду другое. Как получить данное значение в коде, в виде переменной? Вот так:

$menu_object = wp_get_nav_menu_object( 'Меню для шапки' ); // можно указать также ID или ярлык
$menu_count = $menu_object->count; // количество пунктов меню
Миша Рудрастых Разработчик WordPress WooCommerce

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.