Удалить обёртку div и ul из вывода wp_nav_menu

17

Я использую новую систему меню 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, я пытался несколько способов и погуглить, но безрезультатно :(

Фуксия
источник

Ответы:

28

Оборачивать div легко. Когда вы используете wp_nav_menu(), добавьте этот аргумент:'container' => false

Для <ul>элемента есть аргумент с именем 'items_wrap'. См . Ответ Вудчуки для получения дополнительной информации об этом (и голосуйте!).

Джон П Блох
источник
Большое спасибо, человек! Это работает сейчас. Я не был знаком с PHP и не знал, что мне нужно поместить add_filter в functions.php.
1
Это по-прежнему не объясняет, как удалить div, а скорее оборачивает класс wrap_class, описанный выше. Аргумент контейнера, установленный в false, не работает.
Серхио
2
Если containerаргумент не работает, это означает, что вы не используете wp_nav_menu. Вы, вероятно, запускаете резервный cb, который по умолчанию установлен wp_page_menu(), так как не указываете меню или местоположение меню с назначенным меню.
Джон П Блох
30

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>тег переноса

woodchucky
источник
Хех, круто! И добро пожаловать в WPSE @woodchucky!
fuxia
5

Для вывода только li добавьте это в массив wp_nav_menu:

'container'      => '',
'items_wrap'    => '%3$s',
мельница
источник
2

'container' => falseне удалось для меня, потому что я указывал несуществующий 'theme_location'и 'menu'. Это сработало, как только я это исправил.

Решение от: wordpress.org/support

Mirko
источник
0

Чтобы отфильтровать упаковочный div:

add_filter('wp_nav_menu_args', 'prefix_nav_menu_args');
function prefix_nav_menu_args($args = ''){
    $args['container'] = false;
    return $args;
}
Chris_O
источник