Cum să excluz elementele de subnivel din meniu cu wp_get_nav_menu_items?
27 ian. 2012, 18:44:58
Vizualizări: 15K
Voturi: 4
Am următoarea funcție pentru a afișa un meniu personalizat în format select pentru un design responsive la care lucrez.
Funcționează exact cum doresc, cu excepția faptului că aș avea nevoie să exclud elementele de submeniu. Momentan include toate nivelurile.
Știe cineva cum pot spune funcției wp_get_nav_menu_items
să afișeze doar elementele de nivel superior din meniu?
function jeMobileMenu( $args ) {
// Setează argumentele implicite
$defaults = array (
'menuSlug' => '',
'placeholder' => 'Meniu',
'prefix' => ' » ',
'navID' => 'mobileNav',
'navClass' => ''
);
// Combină argumentele primite cu cele implicite
$args = wp_parse_args( $args, $defaults );
// Extrage fiecare element din $args ca variabilă separată (ex. $menuSlug, $placeholder)
extract( $args, EXTR_SKIP );
// Dacă nu este specificat slug-ul meniului, ieșim
if ( empty($menuSlug) )
return;
// Dacă meniul specificat nu există, ieșim
if ( !has_nav_menu( $menuSlug ) )
return;
$locations = get_nav_menu_locations();
$menu = wp_get_nav_menu_object( $locations[ $menuSlug ] );
// Obține DOAR elementele de nivel superior (parent = 0)
$menu_items = wp_get_nav_menu_items($menu->term_id, array(
'meta_key' => '_menu_item_menu_item_parent',
'meta_value' => '0'
));
// Învelește select-ul într-un element nav cu ID-ul și clasele specificate
$menu_output = '<nav id="' . $navID . '" class="' . $navClass . '">';
$menu_output .= '<select id="menu-' . $menuSlug . '" onchange="window.open(this.options[this.selectedIndex].value,\'_top\')">';
// Adaugă placeholder-ul și link-ul către homepage
$menu_output .= '<option value="">' . $placeholder . '</option>';
$menu_output .= '<option value="' . home_url( '/' ) . '">' . $prefix . 'Acasă</option>';
// Parcurge toate elementele meniului și le creează ca opțiuni în lista select
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;
}
Toate răspunsurile la întrebare
1
2
Cred că am reușit să rezolv!!
Am făcut un print_r pentru fiecare $menu_item și am observat că există o cheie în array numită menu_item_parent.
Așa că am schimbat asta:
foreach ( (array) $menu_items as $key => $menu_item ) {
$title = $menu_item->title;
$url = $menu_item->url;
$menu_output .= '<option value="' . $url . '">' . $prefix . $title . '</option>';
}
în asta:
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;
}
Acum va afișa doar elementele de meniu care nu au un părinte.

Brigante
297
27 ian. 2012 19:06:35
Întrebări similare