Удаление обертывающих div и ul из вывода wp_nav_menu

5 окт. 2010 г., 05:50:13
Просмотры: 52.1K
Голосов: 22

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

0
Все ответы на вопрос 6
1
34

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>

29 мар. 2011 г. 04:59:48
Комментарии

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

fuxia fuxia
26 апр. 2011 г. 02:18:44
3
30

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

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

5 окт. 2010 г. 06:26:49
Комментарии

Большое спасибо, друг! Теперь всё работает. Я не был знаком с PHP и не знал, что нужно добавлять add_filter в functions.php.

User User
7 окт. 2010 г. 02:11:41

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

sergio sergio
26 апр. 2011 г. 00:50:34

Если параметр container не работает, значит вы не используете wp_nav_menu. Скорее всего, срабатывает fallback cb, который по умолчанию вызывает wp_page_menu(), потому что вы не указали ни конкретное меню, ни расположение меню с назначенным меню.

John P Bloch John P Bloch
27 апр. 2011 г. 00:03:18
0

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

'container'      => '',
'items_wrap'    => '%3$s',
8 мая 2015 г. 14:55:16
0

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

Решение найдено на: wordpress.org/support

4 июн. 2014 г. 23:32:17
0

Чтобы убрать оборачивающий div:

add_filter('wp_nav_menu_args', 'prefix_nav_menu_args');
function prefix_nav_menu_args($args = ''){
    $args['container'] = false;
    return $args;
}
26 апр. 2011 г. 03:54:52
0

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>'
    ) 
); 
30 апр. 2021 г. 12:49:28