@Kryptonit

Как добавить div в li в каждом элементе меню wp_nav_menu()?

<?php
                wp_nav_menu( [
                    'menu'            => 'menu-desktop',
                    'container'       => false,
                    'menu_class'      => 'main-menu-desktop',
                    'echo'            => true,
                    'items_wrap'      => '<ul class="main-menu-desktop">%3$s</ul>',
                    'depth'           => 1,
                    'after'           =>'<div>hello</div>'
                ] );
            ?>
            <!-- <ul class="main-menu-desktop">
                <li class="li-page li-page-desktop"> 
                    <a href="<?php bloginfo('template_url')?>/template-parts/intersting.php" class="li-page-a" >Интересное</a>
                    <div class="blueLineNav"></div>
                </li>
                <li class="li-page li-page-desktop">
                    <a href="<?php bloginfo('template_url')?>/template-parts/contacts.php" class="li-page-a" >Контакты</a>
                    <div class="blueLineNav"></div>
                </li>
            </ul> -->

- это часть header php, нужно, чтобы элементы динамического меню имели такое же наполнение как в закоменченном html
есть возможность сделать это через фильтр или придётся через js по загрузке страницы менять?
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
В функции wp_nav_menu() есть фильтр wp_nav_menu_items

<li id="menu-item-265" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-265">
	<a href="http://wp-test.ru/post-99">Обратная связь</a>
</li>
<li id="menu-item-266" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-266">
	<a href="http://wp-test.ru/post-98">Все статьи</a>
</li>


В нем разметка примерно такого вида, менять ее достаточно сложно, для парсинга HTML я использую Simple HTML Dom Parser

Еще один вариант — переписать полностью Walker, но этот вариант еще сложнее предыдущего

Самый простой вариант — получить массив элементов меню с помощью функции wp_get_nav_menu_items() и вывести свою разметку

// Получаем элементы меню по ID.
$nav_menu_items = wp_get_nav_menu_items( $menu_id );

// Или получаем элементы меню по location.
$menu_location = 'primary';
$locations     = get_nav_menu_locations();

if ( isset( $locations[ $menu_location ] ) ) {
  $nav_menu_items = wp_get_nav_menu_items( $locations[ $menu_location ] );
}
Ответ написан
Ваш ответ на вопрос

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

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