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.
User
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.
sergio
'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>'
)
);