Eliminar el div envolvente y ul de la salida de wp_nav_menu

5 oct 2010, 05:50:13
Vistas: 52.1K
Votos: 22

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 :(

0
Todas las respuestas a la pregunta 6
1
34

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>

29 mar 2011 04:59:48
Comentarios

¡Eh, genial! ¡Y bienvenido a WPSE @woodchucky!

fuxia fuxia
26 abr 2011 02:18:44
3
30

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!).

5 oct 2010 06:26:49
Comentarios

¡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 User
7 oct 2010 02:11:41

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 sergio
26 abr 2011 00:50:34

Si el argumento container no funciona, significa que no estás usando wp_nav_menu. Probablemente estés ejecutando el fallback cb, que por defecto es wp_page_menu(), al no especificar un menú o una ubicación de menú con un menú asignado.

John P Bloch John P Bloch
27 abr 2011 00:03:18
0

Para mostrar solo elementos li, añade esto al array de wp_nav_menu:

'container'      => '',
'items_wrap'    => '%3$s',
8 may 2015 14:55:16
0

'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

4 jun 2014 23:32:17
0

Para eliminar el div envolvente:

add_filter('wp_nav_menu_args', 'prefix_nav_menu_args');
function prefix_nav_menu_args($args = ''){
    // Elimina el contenedor div del menú de navegación
    $args['container'] = false;
    return $args;
}
26 abr 2011 03:54:52
0

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>'
    ) 
); 
30 abr 2021 12:49:28