Функция wp_get_nav_menu_items()
предназначена для получения всех элементов меню навигации в WordPress. Она возвращает массив элементов меню или false
, если запрос не удался. Эта функция полезна для динамического формирования меню, особенно если требуется изменить вывод элементов в зависимости от их структуры.
wp_get_nav_menu_items( int|string|WP_Term $menu, array $args = array() ): array|false
Функция принимает два основных параметра:
$menu
(обязательно) — это ID, slug, имя или объект меню.$args
(необязательно) — массив аргументов для изменения поведения запроса.
Аргументы $args
:
Некоторые основные параметры, которые могут быть переданы:
order
(строка) — порядок вывода элементов меню. По умолчанию:'ASC'
.orderby
(строка) — поле, по которому элементы меню будут сортироваться. По умолчанию:'menu_order'
.post_type
(строка) — тип постов меню. По умолчанию:'nav_menu_item'
.nopaging
(логическое) — получение всех элементов меню. По умолчанию:true
.
Пример 1: Получение и вывод меню с помощью функции
В этом примере мы создадим меню Bootstrap 3 с подменю без использования WP_nav_walker:
function create_bootstrap_menu( $theme_location ) {
if ( ($theme_location) && ($locations = get_nav_menu_locations()) && isset($locations[$theme_location]) ) {
$menu = get_term( $locations[$theme_location], 'nav_menu' );
$menu_items = wp_get_nav_menu_items($menu->term_id);
$menu_list = '<nav class="navbar navbar-default">';
$menu_list .= '<div class="container-fluid">';
$menu_list .= '<div class="navbar-header">';
$menu_list .= '<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-menu">';
$menu_list .= '<span class="sr-only">Toggle navigation</span>';
$menu_list .= '<span class="icon-bar"></span>';
$menu_list .= '<span class="icon-bar"></span>';
$menu_list .= '<span class="icon-bar"></span>';
$menu_list .= '</button>';
$menu_list .= '<a class="navbar-brand" href="' . home_url() . '">' . get_bloginfo('name') . '</a>';
$menu_list .= '</div>';
$menu_list .= '<div class="collapse navbar-collapse" id="navbar-menu">';
$menu_list .= '<ul class="nav navbar-nav">';
foreach ( $menu_items as $menu_item ) {
if ( $menu_item->menu_item_parent == 0 ) {
$menu_list .= '<li><a href="' . $menu_item->url . '">' . $menu_item->title . '</a></li>';
}
}
$menu_list .= '</ul>';
$menu_list .= '</div>';
$menu_list .= '</div>';
$menu_list .= '</nav>';
echo $menu_list;
}
}
Пример 2: Создание простого массива меню
Следующий пример показывает, как создать простой массив из элементов меню:
function wp_get_menu_array( $current_menu ) {
$menu_items = wp_get_nav_menu_items( $current_menu );
$menu_array = array();
foreach ( $menu_items as $item ) {
if ( empty( $item->menu_item_parent ) ) {
$menu_array[$item->ID] = array(
'ID' => $item->ID,
'title' => $item->title,
'url' => $item->url,
'children' => array(),
);
}
}
foreach ( $menu_items as $item ) {
if ( $item->menu_item_parent ) {
$menu_array[$item->menu_item_parent]['children'][$item->ID] = array(
'ID' => $item->ID,
'title' => $item->title,
'url' => $item->url,
);
}
}
return $menu_array;
}
Пример 3: Вывод меню с учетом вложенных элементов
Этот код выводит меню с поддержкой вложенных элементов (подменю):
function clean_custom_menu( $theme_location ) {
if ( ($theme_location) && ($locations = get_nav_menu_locations()) && isset($locations[$theme_location]) ) {
$menu = get_term( $locations[$theme_location], 'nav_menu' );
$menu_items = wp_get_nav_menu_items($menu->term_id);
$menu_list = '<ul class="main-nav">';
$submenu = false;
foreach ( $menu_items as $item ) {
if ( !$item->menu_item_parent ) {
$menu_list .= '<li><a href="' . $item->url . '">' . $item->title . '</a></li>';
} else {
if ( !$submenu ) {
$submenu = true;
$menu_list .= '<ul class="sub-menu">';
}
$menu_list .= '<li><a href="' . $item->url . '">' . $item->title . '</a></li>';
}
if ( $submenu && !next($menu_items)->menu_item_parent ) {
$menu_list .= '</ul>';
$submenu = false;
}
}
$menu_list .= '</ul>';
echo $menu_list;
}
}
Заключение
Функция wp_get_nav_menu_items()
предоставляет гибкость для создания сложных и вложенных меню в WordPress, что позволяет разработчикам легко контролировать структуру и вывод меню на сайте.