Задать вопрос
@redesupar

Как правильно сделать двухуровневое меню wordpress?

Не могу сделать двухуровневое меню, подскажите пожалуйста как правильнее сделать?
Нужно сделать такое меню
<nav class="nav">
            <div class="nav__wrapper">
                <ul class="nav__list nav-list">
                    <li class="nav-list__item nav-list__item--toggle">
                        <a href="#" class="nav-list__link">Открыть меню</a>
                        <div class="nav-list__icon"></div>
                    </li>
                    <li class="nav-list__item">
                        <a href="#" class="nav-list__link">Гидроизоляция </a>
                        <span class="nav-list__icon"></span>
                        <ul class="nav-sublist">
                            <li class="nav-sublist__item">
                                <p class="nav-sublist__title">Популярные услуги:</p>
                            </li>
                            <li class="nav-sublist__item">
                                <a href="#" class="nav-sublist__link">Гидроизоляция кровли</a>
                            </li>
                                          <li>
                                <a href="#" class="nav-sublist__button">Посмотреть все услуги</a>
                            </li>
                        </ul>
                    </li>
                     </ul>
            </div>
        </nav>


Что не получается, не могу добавить первым пунктом для мобильных
<li class="nav-list__item nav-list__item--toggle">
                        <a href="#" class="nav-list__link">Открыть меню</a>
                        <div class="nav-list__icon"></div>
                    </li>


Если меню двухуровневое то не могу добавить после a
<span class="nav-list__icon"></span>

добавить
<li class="nav-sublist__item">
                                <p class="nav-sublist__title">Популярные услуги:</p>
                            </li>


и поменять стили для li a в двухуровневых

Делаю так
<nav id="menu" class="nav" role="navigation" itemscope itemtype="https://schema.org/SiteNavigationElement">
  							<?php wp_nav_menu( array(

  'menu'            => 'main-menu',              // (string) Название выводимого меню (указывается в админке при создании меню, приоритетнее чем указанное местоположение theme_location - если указано, то параметр theme_location игнорируется)
  'container'       => 'div',           // (string) Контейнер меню. Обворачиватель ul. Указывается тег контейнера (по умолчанию в тег div)
  'container_class' => 'nav__wrapper',              // (string) class контейнера (div тега)
  'container_id'    => '',              // (string) id контейнера (div тега)
  'menu_class'      => 'nav__list nav-list',          // (string) class самого меню (ul тега)
  'menu_id'         => '',              // (string) id самого меню (ul тега)
  'echo'            => true,            // (boolean) Выводить на экран или возвращать для обработки
  'fallback_cb'     => 'wp_page_menu',  // (string) Используемая (резервная) функция, если меню не существует (не удалось получить)
  'before'          => '',              // (string) Текст перед <a> каждой ссылки
  'after'           => '',              // (string) Текст после </a> каждой ссылки
  'link_before'     => '',              // (string) Текст перед анкором (текстом) ссылки
  'link_after'      => '',              // (string) Текст после анкора (текста) ссылки
  'items_wrap'      => '<ul id="%1$s" class="%2$s">%3$s</ul>',
  'depth'           => 0,
  'add_li_class'  => 'nav-list__item',// (integer) Глубина вложенности (0 - неограничена, 2 - двухуровневое меню)
  'walker'          => ''              // (object) Класс собирающий меню. Default: new Walker_Nav_Menu
) ); ?>
  

</nav>


в functions.php

function theme_add_anchor_links($classes, $item, $args) {
$classes['class'] = "nav-list__link";
return $classes;
}

add_filter("nav_menu_link_attributes", "theme_add_anchor_links", 1, 3);
  function add_additional_class_on_li($classes, $item, $args) {
    if(isset($args->add_li_class)) {
        $classes[] = $args->add_li_class;
    }
    return $classes;
}
add_filter('nav_menu_css_class', 'add_additional_class_on_li', 1, 3);
  add_filter( 'nav_menu_submenu_css_class', 'change_wp_nav_menu', 10, 3 );

function change_wp_nav_menu( $classes, $args, $depth ) {
	foreach ( $classes as $key => $class ) {
		if ( $class == 'sub-menu' ) {
			$classes[ $key ] = 'nav-sublist';
		}
	}

	return $classes;
}
  • Вопрос задан
  • 125 просмотров
Подписаться 1 Простой 7 комментариев
Решения вопроса 1
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
4 варианта на вскидку

1) написать extends Walker_Nav_Menu
2) собрать меню через wp_get_nav_menu_items
3) правильно и вдумчиво использовать хуки из стандартного Walker_Nav_Menu
ek8aYQ2g.jpg?download=1&name=%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82-17-10-2023%2009:58:02.jpg
4) сходить на фриланс и нанять там того кто умеет
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы