Удаление обертывающих 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.

Это всё ещё не объясняет, как удалить div, который оборачивает wrap_class, описанный выше. Параметр container со значением false не работает.

Параметр '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>'
)
);
