A filter hook called by the WordPress Walker_Nav_Menu class.
<?php
/* WP 3.0+ */
function filter_handler( $classes , $item ) { ...... }
add_filter( 'nav_menu_css_class', 'filter_handler', 10, 2 );
/* WP 3.1+ */
function filter_handler( $classes , $item, $args ) { ...... }
add_filter( 'nav_menu_css_class', 'filter_handler', 10, 3 );
/* WP 4.1+ */
function filter_handler( $classes, $item, $args, $depth ) { ...... }
add_filter( 'nav_menu_css_class', 'filter_handler', 10, 4 );
?>
The following example adds a unique CSS class to a single, specific nav menu item.
function my_special_nav_class( $classes, $item ) { if ( is_single() && $item->title == 'Blog' ) { $classes[] = 'special-class'; } return $classes; } add_filter( 'nav_menu_css_class', 'my_special_nav_class', 10, 2 );
You can use information from the $args parameter to conditionally filter classes based on properties of the menu that contains the items.
function my_secondary_menu_classes( $classes, $item, $args ) { // Only affect the menu placed in the 'secondary' wp_nav_bar() theme location if ( 'secondary' === $args->theme_location ) { // Make these items 3-columns wide in Bootstrap $classes[] = 'col-md-3'; } return $classes; } add_filter( 'nav_menu_css_class', 'my_secondary_menu_classes', 10, 3 );
nav_menu_css_class() is located in wp-includes/nav-menu-template.php
.