Фильтр nav_menu_submenu_css_class в WordPress позволяет изменять или добавлять CSS-классы для вложенных элементов <ul> в меню. По умолчанию для всех подменю добавляется класс sub-menu. Этот хук полезен для стилизации вложенных списков в меню и создания многоуровневых меню с различными эффектами и анимациями.
apply_filters( 'nav_menu_submenu_css_class', string[] $classes, stdClass $args, int $depth );
Этот фильтр позволяет разработчику добавить, изменить или удалить CSS-классы для списка подменю в меню WordPress. Функция применяется к каждому вложенному <ul> элементу, который находится внутри основного меню.
Параметры
$classes(массив строк): Массив CSS-классов, применяемых к элементу<ul>.$args(stdClass): Объект с аргументамиwp_nav_menu().$depth(int): Уровень вложенности пункта меню. Верхний уровень имеет значение 0, первый вложенный — 1 и так далее.
Пример 1: Удаление всех CSS-классов у вложенных меню
Этот пример показывает, как удалить все стандартные CSS-классы у всех подменю. Полезно, если вы хотите назначить свои классы или полностью убрать стилизацию.
add_filter( 'nav_menu_submenu_css_class', 'remove_all_submenu_classes', 10, 3 );
function remove_all_submenu_classes( $classes, $args, $depth ) {
    return []; // Удаляем все классы
}
Пример 2: Добавление пользовательских CSS-классов ко всем подменю
Здесь мы добавляем два дополнительных CSS-класса ко всем вложенным меню, чтобы применить общие стили для всех подменю, вне зависимости от уровня вложенности.
add_filter( 'nav_menu_submenu_css_class', 'add_custom_submenu_classes', 10, 3 );
function add_custom_submenu_classes( $classes, $args, $depth ) {
    $classes[] = 'custom-submenu';
    $classes[] = 'additional-class';
    return $classes;
}
Пример 3: Добавление классов только для определенной области меню
В этом примере CSS-классы добавляются только для подменю в области footer-menu. Это позволяет изолировать стилизацию для конкретного меню, не влияя на остальные меню сайта.
add_filter( 'nav_menu_submenu_css_class', 'custom_classes_for_footer_menu', 10, 3 );
function custom_classes_for_footer_menu( $classes, $args, $depth ) {
    if ( $args->theme_location === 'footer-menu' ) {
        $classes[] = 'footer-submenu-style';
        $classes[] = 'footer-submenu-color';
    }
    return $classes;
}
Пример 4: Замена стандартного класса sub-menu на пользовательский
Если вам нужно заменить стандартный класс sub-menu на другой, это можно сделать с помощью перебора массива $classes. В этом примере класс sub-menu заменяется на custom-sub-menu.
add_filter( 'nav_menu_submenu_css_class', 'replace_submenu_class', 10, 3 );
function replace_submenu_class( $classes, $args, $depth ) {
    foreach ( $classes as $key => $class ) {
        if ( $class === 'sub-menu' ) {
            $classes[ $key ] = 'custom-sub-menu';
        }
    }
    return $classes;
}
Пример 5: Добавление уникальных классов на основе уровня вложенности меню
Этот пример добавляет уникальный класс для каждого уровня вложенности. Например, submenu-depth-1 для первого уровня вложенности, submenu-depth-2 для второго и так далее. Это полезно для управления стилями вложенности.
add_filter( 'nav_menu_submenu_css_class', 'add_depth_based_classes', 10, 3 );
function add_depth_based_classes( $classes, $args, $depth ) {
    $classes[] = 'submenu-depth-' . $depth;
    return $classes;
}
Пример 6: Добавление классов только для верхнего уровня вложенности
В этом примере класс добавляется только для подменю, находящихся на первом уровне вложенности ($depth === 1). Это полезно, если вам нужно стилизовать именно первый уровень вложенности, а остальные оставить без изменений.
add_filter( 'nav_menu_submenu_css_class', 'add_class_to_first_depth', 10, 3 );
function add_class_to_first_depth( $classes, $args, $depth ) {
    if ( $depth === 1 ) {
        $classes[] = 'first-depth-submenu';
    }
    return $classes;
}
Заключение
Хук nav_menu_submenu_css_class — это мощный инструмент для кастомизации и управления стилями подменю в WordPress. С его помощью можно динамически добавлять, изменять или удалять CSS-классы в зависимости от уровня вложенности или других условий.