nav_menu_item_args is a WordPress PHP filter that allows you to modify the arguments for a single navigation menu item.
Usage
add_filter('nav_menu_item_args', 'your_custom_function', 10, 3); function your_custom_function($args, $menu_item, $depth) { // Your custom code here return $args; }
Parameters
- $args (stdClass): An object of
wp_nav_menu()
arguments. - $menu_item (WP_Post): Menu item data object.
- $depth (int): Depth of menu item. Used for padding.
More information
See WordPress Developer Resources: https://developer.wordpress.org/reference/hooks/nav_menu_item_args/
Examples
Add custom CSS class to menu items
Add a custom CSS class to all menu items:
add_filter('nav_menu_item_args', 'add_custom_menu_item_class', 10, 3); function add_custom_menu_item_class($args, $menu_item, $depth) { $args->link_before = '<span class="custom-menu-item-class">'; $args->link_after = '</span>'; return $args; }
Add a custom attribute to menu items
Add a data-depth
attribute to menu items based on their depth:
add_filter('nav_menu_item_args', 'add_depth_attribute', 10, 3); function add_depth_attribute($args, $menu_item, $depth) { $args->link_before = '<span data-depth="' . $depth . '">'; $args->link_after = '</span>'; return $args; }
Add icons to menu items
Add icons to specific menu items based on their title:
add_filter('nav_menu_item_args', 'add_menu_icons', 10, 3); function add_menu_icons($args, $menu_item, $depth) { if ($menu_item->title === 'Home') { $args->link_before = '<i class="fa fa-home"></i> '; } elseif ($menu_item->title === 'Contact') { $args->link_before = '<i class="fa fa-envelope"></i> '; } return $args; }
Change menu item text color based on depth
Change the menu item text color based on the depth level:
add_filter('nav_menu_item_args', 'change_text_color_based_on_depth', 10, 3); function change_text_color_based_on_depth($args, $menu_item, $depth) { if ($depth === 1) { $args->link_before = '<span style="color: red;">'; } elseif ($depth === 2) { $args->link_before = '<span style="color: green;">'; } else { $args->link_before = '<span style="color: blue;">'; } $args->link_after = '</span>'; return $args; }
Hide menu items on mobile devices
Hide specific menu items on mobile devices:
add_filter('nav_menu_item_args', 'hide_menu_items_on_mobile', 10, 3); function hide_menu_items_on_mobile($args, $menu_item, $depth) { if ($menu_item->title === 'Dashboard' || $menu_item->title === 'Profile') { $args->link_before = '<span class="hidden-mobile">'; $args->link_after = '</span>';} return $args; } }
Add custom menu item descriptions
Display custom descriptions for menu items:
add_filter('nav_menu_item_args', 'add_menu_item_description', 10, 3); function add_menu_item_description($args, $menu_item, $depth) { if ($menu_item->title === 'Home') { $args->link_after = '<span class="menu-item-description">Welcome to our homepage</span>'; } elseif ($menu_item->title === 'Blog') { $args->link_after = '<span class="menu-item-description">Read our latest articles</span>'; } elseif ($menu_item->title === 'Contact') { $args->link_after = '<span class="menu-item-description">Get in touch with us</span>'; } return $args; }
Add a nofollow
attribute to external menu items
Add a rel="nofollow"
attribute to external menu items:
add_filter('nav_menu_item_args', 'add_nofollow_attribute', 10, 3); function add_nofollow_attribute($args, $menu_item, $depth) { if (strpos($menu_item->url, 'http') === 0 && strpos($menu_item->url, home_url()) === false) { $args->before = '<span rel="nofollow">'; $args->after = '</span>'; } return $args; }
Add different background colors for menu items based on depth
Add a different background color for menu items based on their depth level:
add_filter('nav_menu_item_args', 'add_background_color_based_on_depth', 10, 3); function add_background_color_based_on_depth($args, $menu_item, $depth) { if ($depth === 1) { $args->link_before = '<span style="background-color: yellow;">'; } elseif ($depth === 2) { $args->link_before = '<span style="background-color: orange;">'; } else { $args->link_before = '<span style="background-color: red;">'; } $args->link_after = '</span>'; return $args; }