wake-up-neo.com

wp_get_nav_menu_items wie kann man untergeordnete Menüpunkte ausschließen?

Ich habe die folgende Funktion, um ein benutzerdefiniertes Menü im ausgewählten Format für ein responsives Design auszugeben, an dem ich arbeite.

Es funktioniert genau so, wie ich es möchte, abgesehen davon, dass ich Untermenüpunkte ausschließen müsste. Im Moment umfasst es alle Ebenen.

Weiß jemand, wie ich wp_get_nav_menu_items anweisen kann, nur Menüelemente der obersten Ebene anzuzeigen?

function jeMobileMenu( $args ) {

        // Set up defaults arguments
        $defaults = array (
            'menuSlug'      =>  '',
            'placeholder'   =>  'Menu',
            'prefix'        =>  ' » ',
            'navID'         =>  'mobileNav',
            'navClass'      =>  ''
        );

        // Parse incomming $args into an array and merge it with $defaults
        $args = wp_parse_args( $args, $defaults );

        //Declare each item in $args as its own variable i.e. $menuSlug, $placeholder
        extract( $args, EXTR_SKIP );

        // If no menu slug has been passed then lets bail
        if ( empty($menuSlug) )
            return;

        // If the menu slug that has been passed doesn't correspond to an exisiting menu then lets bail
        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);

        // Wrap the select in a nav element with passed id and classes
        $menu_output = '<nav id="' . $navID . '" class="' . $navClass . '">';

        $menu_output .= '<select id="menu-' . $menuSlug . '" onchange="window.open(this.options[this.selectedIndex].value,\'_top\')">';

        // Add placeholder and home link
        $menu_output .= '<option value="">' . $placeholder . '</option>';
        $menu_output .= '<option value="' . home_url( '/' ) . '">' . $prefix . 'Home</option>';

        // Now loop through all the menu items and create them as options in the select list        
        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;
    }
3
Brigante

Denke, ich habe es geschafft !!

Ich habe ein print_r für jedes $ menu_item erstellt und festgestellt, dass sich dort ein Array-Schlüssel mit dem Namen menu_item_parent befindet.

Also habe ich das geändert:

foreach ( (array) $menu_items as $key => $menu_item ) {
    $title = $menu_item->title;
    $url = $menu_item->url;
    $menu_output .= '<option value="' . $url . '">' . $prefix . $title . '</option>';
}

dazu:

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;
}

Jetzt werden nur Menüelemente ohne übergeordnetes Menüelement abgerufen.

7
Brigante