Remove the menu-item-has-children
class from bottom level menu items.
Description
This runs on the ‘nav_menu_css_class’ filter. The $args and $depth parameters were added after the filter was originally introduced in WordPress 3.0.0 so this needs to allow for cases in which the filter is called without them.
See also
Parameters
$classes
string[]required- Array of the CSS classes that are applied to the menu item’s
<li>
element. $menu_item
WP_Postrequired- The current menu item object.
$args
stdClass|falseoptional- An object of wp_nav_menu() arguments. Default false ($args unspecified when filter is called).
More Arguments from wp_nav_menu( … $args )
Array of nav menu arguments.
menu
int|string|WP_TermDesired menu. Accepts a menu ID, slug, name, or object.
menu_class
stringCSS class to use for the ul element which forms the menu.
Default'menu'
.menu_id
stringThe ID that is applied to the ul element which forms the menu.
Default is the menu slug, incremented.container
stringWhether to wrap the ul, and what to wrap it with.
Default'div'
.container_class
stringClass that is applied to the container.
Default ‘menu-{menu slug}-container’.container_id
stringThe ID that is applied to the container.container_aria_label
stringThe aria-label attribute that is applied to the container when it’s a nav element.fallback_cb
callable|falseIf the menu doesn’t exist, a callback function will fire.
Default is'wp_page_menu'
. Set to false for no fallback.before
stringText before the link markup.after
stringText after the link markup.link_before
stringText before the link text.link_after
stringText after the link text.echo
boolWhether to echo the menu or return it. Default true.depth
intHow many levels of the hierarchy are to be included.
0 means all. Default 0.
Default 0.walker
objectInstance of a custom walker class.theme_location
stringTheme location to be used. Must be registered with register_nav_menu() in order to be selectable by the user.items_wrap
stringHow the list items should be wrapped. Uses printf() format with numbered placeholders. Default is a ul with an id and class.item_spacing
stringWhether to preserve whitespace within the menu’s HTML.
Accepts'preserve'
or'discard'
. Default'preserve'
.
Default:
false
$depth
int|falseoptional- Depth of menu item. Default false ($depth unspecified when filter is called).
Default:
false
Source
function wp_nav_menu_remove_menu_item_has_children_class( $classes, $menu_item, $args = false, $depth = false ) {
/*
* Account for the filter being called without the $args or $depth parameters.
*
* This occurs when a theme uses a custom walker calling the `nav_menu_css_class`
* filter using the legacy formats prior to the introduction of the $args and
* $depth parameters.
*
* As both of these parameters are required for this function to determine
* both the current and maximum depth of the menu tree, the function does not
* attempt to remove the `menu-item-has-children` class if these parameters
* are not set.
*/
if ( false === $depth || false === $args ) {
return $classes;
}
// Max-depth is 1-based.
$max_depth = isset( $args->depth ) ? (int) $args->depth : 0;
// Depth is 0-based so needs to be increased by one.
$depth = $depth + 1;
// Complete menu tree is displayed.
if ( 0 === $max_depth ) {
return $classes;
}
/*
* Remove the `menu-item-has-children` class from bottom level menu items.
* -1 is used to display all menu items in one level so the class should
* be removed from all menu items.
*/
if ( -1 === $max_depth || $depth >= $max_depth ) {
$classes = array_diff( $classes, array( 'menu-item-has-children' ) );
}
return $classes;
}
Changelog
Version | Description |
---|---|
6.2.0 | Introduced. |
User Contributed Notes
You must log in before being able to contribute a note or feedback.