@dimaast2020

Wp_nav_menu удалить li ul, оставить и добавить класс актив для текущей страницы и дочерней?

Друзья, привет!

Помогите разобраться.

Появилась задачи в wp_nav_menu убрать обвертку ul, li и добавить активный класс для ссылки.

Данную задачу я успешно выполнил.

Удалил обвертку ul, li

<?php
                    $headerMenu = array(
                        'theme_location' => 'header_menu',
                        'container' => '',
                        'echo' => '',
                        'items_wrap' => '%3$s',
                        'depth' => 0
                    );
                    echo strip_tags( wp_nav_menu( $headerMenu ), '<a>' );
                ?>


И через function.php добавил класс .active
function filter_nav_menu_link_attributes( $atts, $item, $args ) {
	if ( $args->theme_location === 'header_nav' ) {
		if ( $item->current ) {
			$atts['class'] .= 'active';
        };
        if ( $item->current_item_parent ) {
			$atts['class'] .= 'active';
        }
	}
	return $atts;
};
add_filter( 'nav_menu_link_attributes', 'filter_nav_menu_link_attributes', 10, 4 );


А как добавить класс .active, если открыта дочерняя страница?

В Wordpress реализовано через класс .current-page-ancestor.

Подскажите, пожалуйста, с реализацией. Спасибо!
  • Вопрос задан
  • 502 просмотра
Пригласить эксперта
Ответы на вопрос 2
@dimaast2020 Автор вопроса
21 просмотр и не одного ответа.

В принципе, я сам разобрался, но, исходя из прочитанных топиков сложилось впечатление что здесь отвечают только на легкие вопросы. ))

Народ. Харе язык в заднице держать.
Ответ написан
@Wisedev
В решении вопроса написан некорректный код. Начиная от того что в wp_nav_menu параметр array и и в нем echo это булевое значение а не пустое значение строки. Так же значение 'items_wrap' => '%3$s', убирает только обертку оставляя только li с ссылками внутри что приведет к невалидности HTML если всё это не вывести в своей обертке ul.
Для того чтобы удалить ul и li как изначально требовалось - нужно применить функцию wp_get_nav_menu_items:
if( $menu_items = wp_get_nav_menu_items('Название меню') ) { // "Название меню" - это название меню из админки - не путать с ярлыком при создании меню!   Вы можете также использовать ID или ярлык
	$menu_list = '';
	foreach ( (array) $menu_items as $key => $menu_item ) {
		$title = $menu_item->title; 
		$url = $menu_item->url;
		$menu_list .= '<a href="' . $url . '">' . $title . '</a>';
	}
	echo $menu_list;
}

Класс active не смотрел. Там уже можно что-то придумать.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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