Eliminar el div envolvente y ul de la salida de wp_nav_menu
Estoy usando el nuevo sistema de menús de WordPress, y este es el resultado de 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>
Lo que quiero es solo esto:
<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>
Sin el div o ul envolvente, he estado intentando algunas formas y buscando en Google pero sin resultado :(

wp_nav_menu()
acepta un parámetro no documentado
'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>
'
Esto se ejecuta mediante:
$nav_menu .= sprintf( $args->items_wrap, esc_attr( $wrap_id ), esc_attr( $wrap_class ), $items );
Puedes experimentar con los argumentos de sprintf
Ejemplo: 'items_wrap' => '%3$s' eliminaría la etiqueta envolvente <ul>

El div envolvente es fácil. Cuando utilices wp_nav_menu()
, añade este argumento: 'container' => false
Para el elemento <ul>
, existe un argumento llamado 'items_wrap'
. Consulta la respuesta de woodchucky para más información sobre este (¡y vótala!).

¡Muchas gracias, hombre! Ahora funciona. No estaba familiarizado con PHP y no sabía que necesitaba poner el add_filter en el functions.php.

Eso todavía no explica cómo eliminar el div, que más bien envuelve el wrap_class explicado anteriormente. El argumento container establecido en false no funciona.

'container' => false
no funcionaba para mí porque estaba especificando un 'theme_location'
y un 'menu'
que no existían. Comenzó a funcionar tan pronto como corregí esto.
Solución de: wordpress.org/support

2021
Probado y Funcionando ✔
Para eliminar el <div>
Usa container => false
o container => ''
dentro de wp_nav_menu
.
wp_nav_menu(
array(
'container' => false
)
);
¿Aún no funciona?
No agregues theme_location
a tu wp_nav_menu
. Si lo haces, seguirás viendo el contenedor <div>
.
wp_nav_menu(
array(
'container' => false,
'theme_location' => 'Menú Principal'
)
);
Para eliminar el <ul>
Si deseas eliminar el envoltorio <ul>
, usa esto. Basado en la respuesta de @Mill.
wp_nav_menu(
array(
'container' => '',
'items_wrap' => '%3$s'
)
);
Si necesitas control sobre los elementos <ul>
Si deseas conservar todos los elementos dentro del <ul>
con el id
y class
originales de WordPress, usa esto 'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>'
basado en la respuesta de @woodchucky.
wp_nav_menu(
array(
'container' => '',
'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>'
)
);
