Support » Alpha/Beta/RC » Beta breaks bootstrap nav

  • Testing my theme with 4.9 and the nav ul is no longer getting an ID and Class and no links are in a tags

    
    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
            <div class="navbar-header">
                   <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#jd-bootstrap-nav-collapse">
                            <span class="icon-bar"></span>
                            <span class="icon-bar"></span>
                            <span class="icon-bar"></span>
                    </button>
    <!-- custom calls to options stored in Admin section "Theme Options" to display the logo or not -->
     <a class="navbar-brand" id="logo" href="<?php echo site_url(); ?>"><img src="<?php header_image(); ?>" height="<?php echo get_custom_header()->height; ?>" width="<?php echo get_custom_header()->width; ?>" alt="" class="img-responsive logo"/></a>
    <!-- custom calls to options stored in Admin section "Theme Options" to display the logo or not -->
    
            </div><!-- /. navbar-header -->
                <!-- Collect the nav links from WordPress -->
      <div class="collapse navbar-collapse" id="jd-bootstrap-nav-collapse">         
    					  <?php $args = array(
    					          'theme_location' => 'primary',
    					          'depth' => 0,
    					          'container' => 'ul',
    					          'menu_class'  => 'nav navbar-nav',
    					          'walker'  => new BootstrapNavMenuWalker()
    					          );
    					    wp_nav_menu($args);
    					  ?>
      </div><!-- ./collapse -->
              </div><!-- /.container -->
            </nav>
    
Viewing 6 replies - 1 through 6 (of 6 total)
  • I believe you’ll need to share the code for your BootstrapNavMenuWalker class for us to be able to see what is going on.

    Thanks –

    
    <?php
     
    /**
    * Extended Walker class for use with the
    * Twitter Bootstrap toolkit Dropdown menus in WordPress.
    * Edited to support n-levels submenu.
    * @author johnmegahan https://gist.github.com/1597994, Emanuele 'Tex' Tessore https://gist.github.com/3765640
    * @license CC BY 4.0 https://creativecommons.org/licenses/by/4.0/
    */
    class BootstrapNavMenuWalker extends Walker_Nav_Menu {
     
     
    function start_lvl( &$output, $depth = 0, $args = array() ) {
     
    $indent = str_repeat( "\t", $depth );
    $submenu = ($depth > 0) ? ' sub-menu' : '';
    $output	.= "\n$indent<ul class=\"dropdown-menu$submenu depth_$depth\">\n";
     
    }
     
    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
     
     
    $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
     
    $li_attributes = '';
    $class_names = $value = '';
     
    $classes = empty( $item->classes ) ? array() : (array) $item->classes;
    // managing divider: add divider class to an element to get a divider before it.
    $divider_class_position = array_search('divider', $classes);
    if($divider_class_position !== false){
    $output .= "<li class=\"divider\"></li>\n";
    unset($classes[$divider_class_position]);
    }
    $classes[] = ($args->has_children) ? 'dropdown' : '';
    $classes[] = ($item->current || $item->current_item_ancestor) ? 'active' : '';
    $classes[] = 'menu-item-' . $item->ID;
    if($depth && $args->has_children){
    $classes[] = 'dropdown-submenu';
    }
     
     
    $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
    $class_names = ' class="' . esc_attr( $class_names ) . '"';
     
    $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
    $id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : '';
     
    $output .= $indent . '<li' . $id . $value . $class_names . $li_attributes . '>';
     
    $attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : '';
    $attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : '';
    $attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : '';
    $attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : '';
    $attributes .= ($args->has_children) ? ' class="dropdown-toggle" data-toggle="dropdown"' : ''; 
     
    $item_output = $args->before;
    $item_output .= '<a'. $attributes .'>';
    $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
    $item_output .= (($depth == 0 || 1) && $args->has_children) ? ' <b class="caret"></b></a>' : '</a>';
    $item_output .= $args->after;
     
     
    $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    }
     
    function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ) {
    //v($element);
    if ( !$element )
    return;
     
    $id_field = $this->db_fields['id'];
     
    //display this element
    if ( is_array( $args[0] ) )
    $args[0]['has_children'] = ! empty( $children_elements[$element->$id_field] );
    else if ( is_object( $args[0] ) )
    $args[0]->has_children = ! empty( $children_elements[$element->$id_field] );
    $cb_args = array_merge( array(&$output, $element, $depth), $args);
    call_user_func_array(array(&$this, 'start_el'), $cb_args);
     
    $id = $element->$id_field;
     
    // descend only when the depth is right and there are childrens for this element
    if ( ($max_depth == 0 || $max_depth > $depth+1 ) && isset( $children_elements[$id]) ) {
     
    foreach( $children_elements[ $id ] as $child ){
     
    if ( !isset($newlevel) ) {
    $newlevel = true;
    //start the child delimiter
    $cb_args = array_merge( array(&$output, $depth), $args);
    call_user_func_array(array(&$this, 'start_lvl'), $cb_args);
    }
    $this->display_element( $child, $children_elements, $max_depth, $depth + 1, $args, $output );
    }
    unset( $children_elements[ $id ] );
    }
     
    if ( isset($newlevel) && $newlevel ){
    //end the child delimiter
    $cb_args = array_merge( array(&$output, $depth), $args);
    call_user_func_array(array(&$this, 'end_lvl'), $cb_args);
    }
     
    //end this element
    $cb_args = array_merge( array(&$output, $element, $depth), $args);
    call_user_func_array(array(&$this, 'end_el'), $cb_args);
     
    }
     
    }
    

    Got links to show up but menu is still not getting the menu name as an id
    http://prntscr.com/gwycfi

    How did you get the links to show up?

    And if you use the same exact theme in 4.8.2 does the menu ID attribute appear?

    Are you sure you assigned a menu to the nav menu location? Or is it falling back to displaying all pages?

    I assigned the menu to the position and the links began to work.

    Yes, in 4.8.2 the UL is assigned an ID “menu-(menu name)”

    http://prntscr.com/gy3mf1

    So I changed the menu code a bit and now I am getting the menu’s name as the id but minus the menu- which is fine.

    
    <?php $args = array(
        'theme_location' => 'primary',
        'depth' => 0,
        'container' => '',
        'menu_class'  => 'nav navbar-nav',
        'walker'  => new BootstrapNavMenuWalker()
        );
      wp_nav_menu($args);
    ?>
    

    http://prntscr.com/gyxmq3
    This is perfectly acceptable – I should have checked here first : https://developer.wordpress.org/reference/functions/wp_nav_menu/

Viewing 6 replies - 1 through 6 (of 6 total)
  • You must be logged in to reply to this topic.