@a22432
Немного Web

Как из меню вывести нужную категорию?

На сайте есть основное меню которе выводится сверху в шапке сайта, выводится с помощью wp_nav_menu(15):
<ul>
<li><a href="">Главная</a></li>
<li><a href="">О компании</a></li>
<li><a href="">Услуги</a>
<ul>
<li><a href="">Дефектация и списание имущества</a></li>
<li><a href="">Утилизация списанного имущества</a>
<ul>
<li><a href="">Утилизация компьютерной техники</a></li>
<li><a href="">Утилизация медоборудования</a></li>
<li><a href="">Утилизация автотранспорта</a></li>
<li><a href="">...</a></li>
</ul>
</li>
<li><a href="">Утилизация химических отходов</a></li>
<li><a href="">Уничтожение архивов документов</a></li>
<li><a href="">Проектирование</a></li>
<li><a href="">...</a></li>
</ul></li>
<li><a href="">Контакты</a></li>
</ul>


Как можно выбрать только раздел Услуги и всё что в нём?
Нужно это чтобы сделать второе дополнительное меню, кто знает, подскажите
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 2
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
Вы можете получить массив объектов меню с помощью wp_get_nav_menu_items() по переданному ID или location

// Получаем элементы меню по 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 ] );
}


В объектах есть параметр menu_item_parent, по которому в цикле можно вывести нужные элементы
Ответ написан
Комментировать
@a22432 Автор вопроса
Немного Web
В Wordpress стандартный метод меню к каждому элементу создаёт уникальный ID по нему можно отсеять любой элемент с помощью DOMDocument. Или построить элементы в нужном порядке.

Например мне нужно было:
1. Вырезать из всего меню только раздел Услуги.
2. Активный подраздел Услуги делать первым в списке, а так же ещё ряд подразделов (в зависимости от активного подраздела) показывать под активным подразделом. Все оставшиеся отображать ниже.
3. В активном подразделе отображать вложенные ссылки.
4. Если посетитель зашел в О компании или Контакты то просто отображать весь список услуг.

В итоге получилось так (часть кода):

$menu = wp_nav_menu(['menu' => 15, 'echo' => false]);

$dom = new DOMDocument();
$menu = mb_convert_encoding($menu, 'HTML-ENTITIES', 'utf-8');
$dom->loadHTML($menu);
$elem = $dom->getElementById('menu-item-812');
$services= $elem->getElementsByTagName('ul');
$services->item(0)->setAttribute("class", "menu_lists");
//$services->removeAttribute("sub-menu");
// Показываем весь раздел с услугами
echo $dom->saveHTML( $services->item(0) );


//Таким образом можно и удалить какой то элемент:
$elem = $dom->getElementById('menu-item-890');
$elem->parentNode->removeChild($elem);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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