1

I'm using bootstrap 3 and a navbar as navigation. I have found this Code to create the menu, works like a charm: https://developer.wordpress.org/reference/functions/wp_get_nav_menu_items/#comment-1609

But for now this code don't provide 3. level items.

I found this page to display the 3. level: http://blog.inbytes.de/2015/11/responsive-multilevel-dropdown-menue-mit-bootstrap-3/

Can you help me to figure out the php part to show the 3. level items, too?

Regards Peronia

EDIT: My code:

function create_bootstrap_menu( $theme_location ) {
if ( ($theme_location) && ($locations = get_nav_menu_locations()) && isset($locations[$theme_location]) ) {

    $menu_list  = '<nav class="navbar navbar-default">' ."\n";
    $menu_list .= '<div class="container-fluid">' ."\n";
    $menu_list .= '<div class="navbar-header">' ."\n";
    $menu_list .= '<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">' ."\n";
    $menu_list .= '<span class="sr-only">Toggle navigation</span>' ."\n";
    $menu_list .= '<span class="icon-bar"></span>' ."\n";
    $menu_list .= '<span class="icon-bar"></span>' ."\n";
    $menu_list .= '<span class="icon-bar"></span>' ."\n";
    $menu_list .= '</button>' ."\n";
    $menu_list .= '</div>' ."\n";

    $menu_list .= '<!-- Collect the nav links, forms, and other content for toggling -->';


    $menu = get_term( $locations[$theme_location], 'nav_menu' );
    $menu_items = wp_get_nav_menu_items($menu->term_id);

    $menu_list .= '<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">' ."\n";
    $menu_list .= '<ul class="nav navbar-nav">' ."\n";

    foreach( $menu_items as $menu_item ) {
        if( $menu_item->menu_item_parent == 0 ) {

            $parent = $menu_item->ID;

            $menu_array = array();
//------------> here start the 2. lvl navigation
            foreach( $menu_items as $submenu ) {
                if( $submenu->menu_item_parent == $parent ) {
                    $bool = true;
                    $menu_array[] = '<li><a href="' . $submenu->url . '">' . $submenu->title . '</a></li>' ."\n";
                }
            }
            if( $bool == true && count( $menu_array ) > 0 ) {

                $menu_list .= '<li class="dropdown">' ."\n";
                $menu_list .= '<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">' . $menu_item->title . ' <span class="caret"></span></a>' ."\n";

                $menu_list .= '<ul class="dropdown-menu">' ."\n";
                $menu_list .= implode( "\n", $menu_array );
                $menu_list .= '</ul>' ."\n";
                $menu_list .= '</li>' ."\n";

            } else {
//------------> here ends the 2. lvl navigation 
//------------> here start the 1. lvl navigation 
                $menu_list .= '<li>' ."\n";
                $menu_list .= '<a href="' . $menu_item->url . '">' . $menu_item->title . '</a>' ."\n";
                $menu_list .= '</li>' ."\n";
            }
//------------> here ends the 1. lvl navigation
//------------> the 3. lvl is missing
        }

    }

    $menu_list .= '</ul>' ."\n";
    $menu_list .= '</div><!-- /.navbar-collapse -->' ."\n";
    $menu_list .= '</div><!-- /.container-fluid -->' ."\n";
    $menu_list .= '</nav>' ."\n";

} else {
    $menu_list = '<!-- no menu defined in location "'.$theme_location.'" -->';
}

echo $menu_list;
}

As i wrote in the comments, the 3. lvl navigation is missing. I don't know where to add.

  • please add you relevant code to the question, and explain exactly what is the issue you are facing. in your code – Mark Kaplun Jan 16 '17 at 7:58
  • done, hope it suits your requirements. – Peronia Jan 16 '17 at 8:43
1

You just need to improve HTML template.

You may use this to get it working. You just need to improve your HTML like this.

You may also try multi-level-dropdown-menu.

  • Thanks, but the php file must check for the third lvl. When it exists load the improved HTML (your links are helpfull!). But when the item doesn't have a child the "normal" item must be loaded. I need this php to check this. – Peronia Jan 16 '17 at 11:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.