There is such a menu structure:

<ul class="nav navbar-nav nav__top-menu"> <li class="nav-item"> <a class="nav-link" href="index.html">home</a> </li> <li class="nav-item dropdown"> <span class="nav-link" id="thisIsUs" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" >about</span> <ul class="dropdown-menu" aria-labelledby="thisIsUs"> <li><a class="dropdown-item" href="#">sub1</a></li> <li><a class="dropdown-item" href="#">sub2</a></li> <li><a class="dropdown-item" href="#">sub3</a></li> <li><a class="dropdown-item" href="#">sub4</a></li> <li><a class="dropdown-item" href="#">sub5</a></li> </ul> </li> </ul> 

Some top-level menu items are a links, and some are span containing a nested list with links.

I connect the menu like this:

  <?php $args = array( 'menu' => 'header-menu', 'menu_class' => 'nav navbar-nav nav__top-menu', 'container' => 'ul', ); wp_nav_menu($args); ?> 

But by default, all menu items are displayed а .

How to make the list item li with the class dropdown contain not a link, but such a span: <span class="nav-link" id="thisIsUs" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" >...</span> .

It is exactly this html structure that is needed, since library work for responsive menu depends on it.

1 answer 1

Found a solution here

Changed a bit:

 if ( $args->has_children && 0 === $depth ) { $item_output .= '<span' . $attributes . '>'; } else { if (!empty($item->attr_title)) { $pos = strpos(esc_attr($item->attr_title), 'glyphicon'); if (false !== $pos) { $item_output .= '<a' . $attributes . '><span class="glyphicon ' . esc_attr($item->attr_title) . '" aria-hidden="true"></span>&nbsp;'; } else { $item_output .= '<a' . $attributes . '><i class="fa ' . esc_attr($item->attr_title) . '" aria-hidden="true"></i>&nbsp;'; } } else { $item_output .= '<a' . $attributes . '>'; } }