Удаление обертывающих div и ul из вывода wp_nav_menu
Я использую новую систему меню WordPress, и вот результат работы wp_nav_menu()
<div class="menu-main-menu-container">
<ul id="menu-main-menu" class="menu">
<li id="menu-item-28" class="menu-item menu-item-type-post_type current-menu-item page_item page-item-21 current_page_item menu-item-28"><a href="http://www.bemang.com/">Trang nhà</a></li>
<li id="menu-item-29" class="menu-item menu-item-type-post_type menu-item-29"><a href="http://www.bemang.com/blog/">Blog</a></li>
<li id="menu-item-30" class="menu-item menu-item-type-post_type menu-item-30"><a href="http://www.bemang.com/gioi-thieu/">Giới thiệu</a></li>
</ul>
</div>
А мне нужно только это:
<li id="menu-item-28" class="menu-item menu-item-type-post_type current-menu-item page_item page-item-21 current_page_item menu-item-28"><a href="http://www.bemang.com/">Trang nhà</a></li>
<li id="menu-item-29" class="menu-item menu-item-type-post_type menu-item-29"><a href="http://www.bemang.com/blog/">Blog</a></li>
<li id="menu-item-30" class="menu-item menu-item-type-post_type menu-item-30"><a href="http://www.bemang.com/gioi-thieu/">Giới thiệu</a></li>
Без обертывающих div или ul, я пробовал несколько способов и искал в Google, но безрезультатно :(
wp_nav_menu() принимает недокументированный параметр
'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>'
Это выполняется с помощью:
$nav_menu .= sprintf( $args->items_wrap, esc_attr( $wrap_id ), esc_attr( $wrap_class ), $items );
Вы можете экспериментировать с аргументами sprintf
Например: 'items_wrap' => '%3$s' удалит оборачивающий тег <ul>
Оберточный div легко убрать. Когда вы используете wp_nav_menu(), добавьте этот аргумент: 'container' => false
Для элемента <ul> есть аргумент под названием 'items_wrap'. Смотрите ответ woodchucky для получения дополнительной информации об этом (и поставьте ему голос!).
Большое спасибо, друг! Теперь всё работает. Я не был знаком с PHP и не знал, что нужно добавлять add_filter в functions.php.
User
Это всё ещё не объясняет, как удалить div, который оборачивает wrap_class, описанный выше. Параметр container со значением false не работает.
sergio
Параметр 'container' => false не работал для меня, потому что я указал несуществующий 'theme_location' и 'menu'. Как только я исправил это, всё заработало.
Решение найдено на: wordpress.org/support
2021
Протестировано и работает ✔
Удаление <div>
Используйте container => false или container => '' внутри wp_nav_menu.
wp_nav_menu(
array(
'container' => false
)
);
Все еще не работает?
Не добавляйте theme_location в ваш wp_nav_menu. Если вы это сделаете, контейнер <div> все равно будет отображаться.
wp_nav_menu(
array(
'container' => false,
'theme_location' => 'Primary Menu'
)
);
Удаление <ul>
Если вы хотите удалить обертку <ul>, используйте этот код. Основано на ответе @Mill.
wp_nav_menu(
array(
'container' => '',
'items_wrap' => '%3$s'
)
);
Если вам нужен контроль над элементами <ul>
Если вы хотите сохранить все элементы внутри <ul> с оригинальными WordPress id и class, используйте 'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>' на основе ответа @woodchucky.
wp_nav_menu(
array(
'container' => '',
'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>'
)
);