Дайте пользовательские имена классов подменю WP навигации

Вопрос или проблема

Я создаю меню, которое будет иметь подпункт > подпункт > подпункт. Стилизация действительно сложная, поэтому было бы идеально переименовать класс “sub-menu” в зависимости от уровня подпункта или хотя бы добавить класс (например, для 1-го подпункта добавить .top-sub-menu, для 2-го подпункта добавить .second-level-sub-menu, для 3-го подпункта добавить .third-level-sub-menu).

  1. Есть ли способ сделать это в WP core?
  2. Если нет, то как лучше всего достичь этого результата?

Я прикрепил HTML-код того, что у меня есть, если это поможет. Любая помощь очень appreciated. Спасибо!

вставьте описание изображения здесь

Мне удалось решить эту задачу, используя хук, который я взял из ответа Артемия Егоровa на этот пост https://stackoverflow.com/questions/5034826/wp-nav-menu-change-sub-menu-class-name, так что я решил поделиться, на случай если кому-то это тоже понадобится:

add_filter( 'nav_menu_submenu_css_class', 'rename_sub_menus', 10, 3 );
function rename_sub_menus( $classes, $args, $depth ){
    foreach ( $classes as $key => $class ) {
    if ( $class == 'sub-menu'  && $depth == 0) {
        $classes[ $key ] = 'first-level-sub-menu';
    } else if ( $class == 'sub-menu'  && $depth == 1) {
      $classes[ $key ] = 'second-level-sub-menu';
    } else if ( $class == 'sub-menu'  && $depth == 2) {
      $classes[ $key ] = 'third-level-sub-menu';
    }
}

return $classes;
}

.

Ответ или решение

Чтобы создать кастомные имена классов для подменю в WordPress, вам необходимо немного изменить стандартное поведение темы. Это можно сделать при помощи фильтра, который добавляет новые классы на основе уровня вложенности подменю.

Шаги для изменения классов подменю

  1. Используйте фильтр nav_menu_submenu_css_class: Этот фильтр позволяет вам изменять массив классов CSS для подменю в зависимости от глубины вложенности.

  2. Создайте функцию для изменения классов: Ваша функция будет проверять уровень глубины и изменять классы в соответствии с нужными вам именами.

  3. Добавьте код в файл functions.php: Для того чтобы ваши изменения вступили в силу, скопируйте и вставьте приведённый ниже код в файл functions.php вашей темы.

Пример кода

add_filter( 'nav_menu_submenu_css_class', 'rename_sub_menus', 10, 3 );

function rename_sub_menus( $classes, $args, $depth ) {
    foreach ( $classes as $key => $class ) {
        // Проверяем уровень вложенности и меняем класс подменю
        if ( $class == 'sub-menu' && $depth == 0 ) {
            $classes[ $key ] = 'first-level-sub-menu';
        } elseif ( $class == 'sub-menu' && $depth == 1 ) {
            $classes[ $key ] = 'second-level-sub-menu';
        } elseif ( $class == 'sub-menu' && $depth == 2 ) {
            $classes[ $key ] = 'third-level-sub-menu';
        }
    }

    return $classes;
}

Изменения в коде

  • Функция rename_sub_menus: Эта функция принимает три параметра: массив классов $classes, объект $args и уровень вложенности $depth. Мы перебираем массив классов и меняем имя класса sub-menu на нужное название в зависимости от уровня вложенности.

  • Проверка глубины: Используя переменную $depth, мы можем установить, на каком уровне меню мы находимся, и присвоить соответствующий класс.

Заключение

Этот подход позволяет организовать стилизацию подменю. Он обеспечивает необходимую гибкость в кастомизации и позволяет избежать конфликта с другими стилями, используя уникальные классы для каждого уровня вложенности. Результат: вы получаете чистый и понятный код, который легко поддерживать и модифицировать в будущем.

Если у вас возникнут дополнительные вопросы или потребуется помощь в настройке стилей, не стесняйтесь обращаться за поддержкой. Надеюсь, этот ответ был полезен для решения вашей задачи!

Оцените материал
Добавить комментарий

Капча загружается...