Nolis
@Nolis
it-гопник

Как сменить классы у вложенных в submenu li и a?

Всем привет,

Устанавливал на сайт WP динамическое меню через wp_nav_menu.
Фильтрами получилось сменить все классы (new):

<ul class="new-class-ul">
 <li class="new-class-li">
 </li>
 <li class="new-class-li">
 </li>
 <li class="new-class-li">
  <ul class="new-class-sub">
    <li class="...">
     <a class="..."></a>
    </li>
    <li class="...">
     <a class="..."></a>
    </li>
  </ul>
 </li>
</ul>


Вложенные классы в submenu принимаю классы верхних уровней li и a, которые я задавал фильтрами.
Мне их нужно поменять на:

header-submenu__item
header-submenu__link


Код фильтров functions.php:
add_filter( 'nav_menu_item_id', 'filter_menu_item_css_id', 10, 4 );
add_filter( 'nav_menu_css_class', 'filter_nav_menu_css_classes', 10, 4 );
add_filter( 'nav_menu_submenu_css_class', 'filter_nav_menu_submenu_css_class', 10, 3 );
add_filter( 'nav_menu_link_attributes', 'filter_nav_menu_link_attributes', 10, 4 );

// UL
function filter_menu_item_css_id( $menu_id, $item, $args, $depth) {
	return $args->theme_location === 'header-menu' ? '' : $menu_id;
}
// LI
function filter_nav_menu_css_classes( $classes, $item, $args, $depth) {
	if ($args->theme_location === 'header-menu') {
		$classes = [
			'header-menu__item'
		];
	}
	return $classes;
}
// SUB-MENU
function filter_nav_menu_submenu_css_class( $classes, $args, $depth) {
	if ($args->theme_location === 'header-menu') {
		$classes = [
			'header-submenu'
		];
	}
	return $classes;
}
// a
function filter_nav_menu_link_attributes( $atts, $item, $args, $depth) {
	if ($args->theme_location === 'header-menu') {
		$atts['class'] = 'header-menu__link';
	}
	return $atts;
}


Можно ли написать какой-то ещё фильтр или стоит прибегнуть к волкеру?
  • Вопрос задан
  • 1303 просмотра
Решения вопроса 1
Nolis
@Nolis Автор вопроса
it-гопник
Сделал кастомный Walker.
Сделал условия на вложенность:

li
if ($depth == 1) {
			$class_names = ' class="header-submenu__item"';
		}
		else {
			$class_names = ' class="header-menu__item"';
		}

		$output .= $indent . '<li' . $id . $class_names . '>';

a
if ($depth == 1) {
			$attributes = ' class="header-submenu__link"';
		}
		else {
			$attributes = ' class="header-menu__link"';
		}
		$item_output  = $args->before;
		$item_output .= '<a' . $attributes . '>';
		$item_output .= $args->link_before . $title . $args->link_after;
		$item_output .= '</a>';
		$item_output .= $args->after;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@aleskokov
Андрей, добрый день, а где вы выводили доп условия?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы