# wp_nav_menu_remove_menu_item_has_children_class()

URL: https://chugunov.pro/api-wordpress/functions/wp_nav_menu_remove_menu_item_has_children_class/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 6.2.0.

## Сигнатура

```php
wp_nav_menu_remove_menu_item_has_children_class( string[] $classes, WP_Post $menu_item, stdClass|false $args = false, int|false $depth = false ): string[]
```

## Описание

Это выполняется на хук-фильтре «nav_menu_css_class». Параметры $args и $depth были добавлены уже после того, как фильтр впервые появился в WordPress 3.0.0, поэтому нужно учитывать случаи, когда фильтр вызывается без них.
См. также https://core.trac.wordpress.org/ticket/56926

## Параметры

- `$classes` `string[]` — обязательный. Массив CSS-классов, применяемых к элементу
  - пункта меню.
- `$menu_item` `WP_Post` — обязательный. Объект текущего пункта меню.
- `$args` `stdClass|false` — необязательный, по умолчанию `false`. Объект аргументов wp_nav_menu(). Значение по умолчанию false ($args не задан при вызове фильтра).
- `$depth` `int|false` — необязательный, по умолчанию `false`. Уровень вложенности пункта меню. Значение по умолчанию false ($depth не задан при вызове фильтра).

## Возвращаемое значение

`string[]`

## Исходный код

Файл: `wp-includes/nav-menu-template.php:664`

```php
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;
}
```

## История изменений

- 6.2.0 — Introduced.

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/wp_nav_menu_remove_menu_item_has_children_class/
