how to add class to certain li element in wp_nav_menu

4.2k Views Asked by At

i'm trying to add a class to the li elements in my wordpress wp_nav_menu. I followed a couple of answer on here but can only get part of it working. So for my nav menu, i have >

functions.php >

//REGISTER NAVIGATION MENU
function smtg_menus() {
  register_nav_menus(
    array(
      'header-menu' => __( 'Header Menu' ),
      'footer-menu' => __( 'Footer Menu' )
    )
  );
}
add_action( 'init', 'smtg_menus' );

This code adds nav-links-dropdown class to the drop down menu on categories.

function my_nav_menu_submenu_css_class( $classes ) {
    $classes[] = 'nav-links-dropdown';
    return $classes;
}
add_filter( 'nav_menu_submenu_css_class', 'my_nav_menu_submenu_css_class' );

Header.php >

$args = array(
    'theme_location'  => 'header-menu',
    'container'       => 'nav',
    'container_class' => '',
    'container_id'    => '',
    'menu_class'      => '',
    'menu_id'         => '',
    'fallback_cb'     => false );
wp_nav_menu( $args );

I have a total of 4 li elements in my main navigation, with only one of those li elements having a sub menu, aka dropdown.

I can't figure out how to add a class to the li that has a drop down in order to trigger the drop down menu.

Looking at the page source, i see >

<!-- START NAV INSIDE NAV BAR -->
<nav class="menu-header-menu-container">
    <ul id="menu-header-menu" class="">
        <li><a href="#">Home</a></li>
        <li><a href="#">Categories</a>
            <ul  class="sub-menu nav-links-dropdown">
                <li><a href="#">Cat1</a></li>
                <li><a href="#">cat2</a></li>
                <li><a href="#">cat3</a></li>
                <li><a href="#">cat4</a></li>
                <li><a href="#">cat5</a></li>
                <li><a href="#">cat6</a></li>
            </ul>
        </li>
        <li><a href="#">Page 3</a></li>
        <li><a href="#">Page 4</a></li>
    </ul>
</nav>

On the second LI element - I need to add the class cats-li-dropdown to it in order to display the drop down menu. I can't seem to figure out how to do this in php anywhere.

Right now I'm using jquery to add the class cats-li-dropdown to the 2nd element like so.

$('nav li:nth-child(2)').addClass('cats-li-dropdown');

How can I avoid having to use jquery to add a class to the second li element?

I already tried adding the class in wordpress in the menu options but it still comes out blank when i look at the page source.

This added nothing to the li element, even though it seems it should. Any other ideas?

Class entered into the menu options in wordpress admin - doesn't add it on page

1

There are 1 best solutions below

1
On

For the custom css classes not showing issue, try adding menu parameter:

$args = array(
    'menu'  => 'header-menu',
    'theme_location'  => 'header-menu',
    'container'       => 'nav',
    'container_class' => '',
    'container_id'    => '',
    'menu_class'      => '',
    'menu_id'         => '',
    'fallback_cb'     => false );
wp_nav_menu( $args );