When using a navigation menu on WordPress, you’ve probably seen the various HTML classes that are added on active elements, such as current-menu-item
, current-menu-parent
, current-menu-ancestor
…
While that kind of classes are fine if you must fully reflect the navigation hierarchy on the menu element, there are some times that you just need a more simple approach, such as just knowing when a certain menu element must look like the active item —for instance, when using Bootstrap.
For these kind of situations, you can use a simple filter to add such a class; something like:
<?php add_filter('nav_menu_css_class', function ($classes, $item, $args, $depth) { // filter by some condition... for instance, only on the "main" menu if ( $args->theme_location !== 'main' ) { return $classes; } // all the different "active" classes added by WordPress $active = [ 'current-menu-item', 'current-menu-parent', 'current-menu-ancestor', 'current_page_item' ]; // if anything matches, add the "active" class if ( array_intersect( $active, $classes ) ) { $classes[] = 'active'; } return $classes; }, 10, 4);