wp_get_nav_menu_items()

Извлекает все элементы меню навигации
Функция WordPress
INT 3.0.0
WordPress Icon

Описание функции

Функция wp_get_nav_menu_items() используется для получения всех элементов меню навигации. Она извлекает все элементы меню указанного навигационного меню и возвращает их в виде массива.

Использование

wp_get_nav_menu_items( int|string|WP_Term $menu, array $args = array() ): array|false

Функция принимает два параметра: $menu (обязательный) и $args (необязательный).

  • $menu (int|string|WP_Term) — Идентификатор, слаг, имя или объект меню. Обязательный параметр.
  • $args (array) — Дополнительные аргументы для передачи в функцию get_posts().
    • order (string) — Порядок сортировки элементов меню, полученных с помощью get_posts(). Будет проигнорирован, если ‘output’ имеет значение ARRAY_A. По умолчанию ‘ASC’.
    • orderby (string) — Поле для сортировки элементов меню, полученных с помощью get_posts(). Укажите поле для сортировки через ‘output_key’, чтобы повлиять на порядок вывода элементов меню. По умолчанию ‘menu_order’.
    • post_type (string) — Тип записи элементов меню. По умолчанию ‘nav_menu_item’.
    • post_status (string) — Статус записи элементов меню. По умолчанию ‘publish’.
    • output (string) — Как упорядочить выводимые элементы меню. По умолчанию ARRAY_A.
    • output_key (string) — Ключ, используемый для упорядочивания фактических элементов меню, которые возвращаются. Обратите внимание, что это не аргумент get_posts() и будет влиять только на вывод элементов меню, обработанных в этой функции. По умолчанию ‘menu_order’.
    • nopaging (bool) — Получить все элементы меню (true) или разбить на страницы (false). По умолчанию true.
    • update_menu_item_cache (bool) — Обновить кэш элементов меню. По умолчанию true.
    • Дополнительные аргументы из get_posts().

Функция возвращает массив элементов меню или false, если элементы меню не найдены.

<?php
$menu_id = 2; // Идентификатор меню
$args = array(
  'order' => 'ASC',
  'orderby' => 'menu_order',
  'post_type' => 'nav_menu_item',
  'post_status' => 'publish',
  'output' => ARRAY_A,
  'output_key' => 'menu_order',
  'nopaging' => true,
  'update_menu_item_cache' => true
);
$menu_items = wp_get_nav_menu_items( $menu_id, $args );
if ( ! empty( $menu_items ) ) {
  foreach ( $menu_items as $menu_item ) {
    // Вывод информации о каждом элементе меню
    echo 'ID: ' . $menu_item->ID . '<br>';
    echo 'Title: ' . $menu_item->title . '<br>';
    echo 'URL: ' . $menu_item->url . '<br>';
    echo 'Description: ' . $menu_item->description . '<br>';
    echo 'Parent ID: ' . $menu_item->menu_item_parent . '<br>';
    echo 'Order: ' . $menu_item->menu_order . '<br>';
    echo '<br>';
  }
}
?>

В этом примере мы получаем элементы меню для меню с идентификатором 2. Затем мы выводим информацию о каждом элементе меню, такую как ID, заголовок, URL, описание, родительский ID и порядок.

Примеры использования

Получение всех элементов меню навигации


$menu_items = wp_get_nav_menu_items('main-menu');
if ( ! empty( $menu_items ) ) {
    foreach ( $menu_items as $menu_item ) {
        // Выводим название элемента меню
        echo $menu_item->title;
    }
}

В данном примере мы используем функцию wp_get_nav_menu_items() для получения всех элементов меню навигации с идентификатором «main-menu». Затем мы проверяем, есть ли элементы меню, и если есть, выводим их названия.

Установка порядка элементов меню


$args = array(
    'menu' => 'main-menu',
    'orderby' => 'menu_order',
    'order' => 'DESC'
);
$menu_items = wp_get_nav_menu_items( $args );
if ( ! empty( $menu_items ) ) {
    foreach ( $menu_items as $menu_item ) {
        // Выводим название элемента меню
        echo $menu_item->title;
    }
}

В данном примере мы используем функцию wp_get_nav_menu_items() для получения всех элементов меню навигации с идентификатором «main-menu». Мы также устанавливаем порядок элементов меню с помощью параметра orderby и устанавливаем его в «menu_order». Затем мы проверяем, есть ли элементы меню, и если есть, выводим их названия.

Сортировка элементов меню


$args = array(
    'menu' => 'main-menu',
    'orderby' => 'title',
    'order' => 'ASC'
);
$menu_items = wp_get_nav_menu_items( $args );
if ( ! empty( $menu_items ) ) {
    foreach ( $menu_items as $menu_item ) {
        // Выводим название элемента меню
        echo $menu_item->title;
    }
}

В данном примере мы используем функцию wp_get_nav_menu_items() для получения всех элементов меню навигации с идентификатором «main-menu». Мы также устанавливаем сортировку элементов меню по названию с помощью параметра orderby и устанавливаем его в «title». Затем мы проверяем, есть ли элементы меню, и если есть, выводим их названия.

Установка типа записи элементов меню


$args = array(
    'menu' => 'main-menu',
    'post_type' => 'page'
);
$menu_items = wp_get_nav_menu_items( $args );
if ( ! empty( $menu_items ) ) {
    foreach ( $menu_items as $menu_item ) {
        // Выводим название элемента меню
        echo $menu_item->title;
    }
}

В данном примере мы используем функцию wp_get_nav_menu_items() для получения всех элементов меню навигации с идентификатором «main-menu». Мы также устанавливаем тип записи элементов меню с помощью параметра post_type и устанавливаем его в «page». Затем мы проверяем, есть ли элементы меню, и если есть, выводим их названия.

Установка статуса записи элементов меню


$args = array(
    'menu' => 'main-menu',
    'post_status' => 'draft'
);
$menu_items = wp_get_nav_menu_items( $args );
if ( ! empty( $menu_items ) ) {
    foreach ( $menu_items as $menu_item ) {
        // Выводим название элемента меню
        echo $menu_item->title;
    }
}

В данном примере мы используем функцию wp_get_nav_menu_items() для получения всех элементов меню навигации с идентификатором «main-menu». Мы также устанавливаем статус записи элементов меню с помощью параметра post_status и устанавливаем его в «draft». Затем мы проверяем, есть ли элементы меню, и если есть, выводим их названия.

Вопросы и ответы

Как получить все элементы меню навигации?

Для получения всех элементов меню навигации в WordPress используется функция wp_get_nav_menu_items(). Она принимает два параметра:

  • $menu — ID, слаг, имя или объект меню. Обязательный параметр.
  • $args — массив дополнительных аргументов для функции get_posts(). Необязательный параметр.

Функция возвращает массив элементов меню или false, если элементы не найдены.


$menu_items = wp_get_nav_menu_items( $menu, $args );
if ( $menu_items ) {
  foreach ( $menu_items as $menu_item ) {
    // Вывод элементов меню
    echo $menu_item->title;
  }
}

Как отсортировать элементы меню навигации?

Для сортировки элементов меню навигации используются параметры order и orderby в массиве $args. По умолчанию элементы сортируются по полю menu_order в порядке возрастания.


$args = array(
  'order'   => 'DESC', // Сортировка в обратном порядке
  'orderby' => 'title' // Сортировка по заголовку
);
$menu_items = wp_get_nav_menu_items( $menu, $args );

Как изменить тип поста элементов меню навигации?

По умолчанию типом поста элементов меню навигации является nav_menu_item. С помощью параметра post_type в массиве $args можно изменить тип поста.


$args = array(
  'post_type' => 'page' // Изменение типа поста на 'page'
);
$menu_items = wp_get_nav_menu_items( $menu, $args );

Как изменить статус поста элементов меню навигации?

Для изменения статуса поста элементов меню навигации используйте параметр post_status при вызове функции wp_get_nav_menu_items(). По умолчанию, статус установлен как ‘publish’.


$menu_items = wp_get_nav_menu_items( $menu, array(
    'post_status' => 'draft'
) );

Как изменить порядок вывода элементов меню навигации?

Для изменения порядка вывода элементов меню навигации используйте параметры order и orderby при вызове функции wp_get_nav_menu_items(). По умолчанию, элементы меню сортируются по полю ‘menu_order’ в порядке возрастания.


$menu_items = wp_get_nav_menu_items( $menu, array(
    'order'   => 'DESC',
    'orderby' => 'title'
) );

Как получить все элементы меню без пагинации?

Для получения всех элементов меню без пагинации установите параметр nopaging в значение true при вызове функции wp_get_nav_menu_items(). По умолчанию, параметр установлен как true.


$menu_items = wp_get_nav_menu_items( $menu, array(
    'nopaging' => true
) );

Как обновить кэш элементов меню навигации?

Для обновления кэша элементов меню навигации установите параметр update_menu_item_cache в значение false при вызове функции wp_get_nav_menu_items(). По умолчанию, параметр установлен как true.


$menu_items = wp_get_nav_menu_items( $menu, array(
    'update_menu_item_cache' => false
) );

Функция wp_get_nav_menu_items() позволяет получить все элементы меню навигации. Вы можете изменить статус поста элементов меню, изменить порядок вывода элементов, получить все элементы без пагинации и обновить кэш элементов меню навигации, используя соответствующие параметры.

Связанные элементы

  • Функция wp_get_nav_menu_object(): Возвращает объект меню по его ID, имени или слагу.
  • Функция wp_nav_menu(): Выводит HTML-код для меню навигации.
  • Функция wp_nav_menu_item_post_type_meta_box(): Добавляет метабокс для настройки типа записи элемента меню.
  • Хук wp_nav_menu_args: Позволяет изменить аргументы, используемые при выводе меню навигации.
  • Хук wp_get_nav_menu_items: Позволяет изменить результаты запроса элементов меню навигации.
  • Хук wp_update_nav_menu_item: Позволяет изменить элемент меню навигации перед его обновлением.
  • Класс Walker_Nav_Menu: Определяет базовый класс для создания классов-обходчиков меню навигации.
Обсуждение