Как исключить подуровневые пункты меню в wp_get_nav_menu_items?
27 янв. 2012 г., 18:44:58
Просмотры: 15K
Голосов: 4
У меня есть следующая функция для вывода пользовательского меню в формате select для адаптивного дизайна, над которым я работаю.
Она работает именно так, как я хочу, за исключением того, что мне нужно исключить подпункты меню. Сейчас она включает все уровни.
Кто-нибудь знает, как я могу указать wp_get_nav_menu_items
выводить только пункты верхнего уровня меню?
function jeMobileMenu( $args ) {
// Установка аргументов по умолчанию
$defaults = array (
'menuSlug' => '',
'placeholder' => 'Меню',
'prefix' => ' » ',
'navID' => 'mobileNav',
'navClass' => ''
);
// Объединение входящих $args с $defaults
$args = wp_parse_args( $args, $defaults );
// Извлечение каждого элемента $args в отдельную переменную
extract( $args, EXTR_SKIP );
// Если slug меню не передан, выходим
if ( empty($menuSlug) )
return;
// Если переданный slug меню не существует, выходим
if ( !has_nav_menu( $menuSlug ) )
return;
$locations = get_nav_menu_locations();
$menu = wp_get_nav_menu_object( $locations[ $menuSlug ] );
$menu_items = wp_get_nav_menu_items($menu->term_id);
// Обертка select в nav элемент с переданными id и классами
$menu_output = '<nav id="' . $navID . '" class="' . $navClass . '">';
$menu_output .= '<select id="menu-' . $menuSlug . '" onchange="window.open(this.options[this.selectedIndex].value,\'_top\')">';
// Добавление плейсхолдера и ссылки на главную
$menu_output .= '<option value="">' . $placeholder . '</option>';
$menu_output .= '<option value="' . home_url( '/' ) . '">' . $prefix . 'Главная</option>';
// Цикл по всем пунктам меню и создание option элементов
foreach ( (array) $menu_items as $key => $menu_item ) {
$title = $menu_item->title;
$url = $menu_item->url;
$menu_output .= '<option value="' . $url . '">' . $prefix . $title . '</option>';
}
$menu_output .= '</select>';
$menu_output .= '</nav>';
echo $menu_output;
}
Все ответы на вопрос
1
2
Кажется, я разобрался!
Я сделал print_r для каждого $menu_item и увидел, что там есть ключ массива под названием menu_item_parent.
Поэтому я изменил это:
foreach ( (array) $menu_items as $key => $menu_item ) {
$title = $menu_item->title;
$url = $menu_item->url;
$menu_output .= '<option value="' . $url . '">' . $prefix . $title . '</option>';
}
на это:
foreach ( (array) $menu_items as $key => $menu_item ) {
if ( $menu_item->menu_item_parent == 0 ) :
$title = $menu_item->title;
$url = $menu_item->url;
$menu_output .= '<option value="' . $url . '">' . $prefix . $title . '</option>';
endif;
}
Теперь будут выбираться только пункты меню, у которых нет родительского элемента.

Brigante
297
27 янв. 2012 г. 19:06:35
Похожие вопросы