¿Cómo elimino UL en wp_nav_menu?

15

Busqué en este sitio y encontré muchas respuestas para esta pregunta. La mayoría de ellos no está trabajando en mi tema.

Aquí hay una solución que encontrado y funciona de acuerdo a mi necesidad.

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

Este código eliminará ul al principio y al final de wp_nav_menu() . Así que en mi tema acabo de escribir

<ul class="primary-nav">
<?php  wp_nav_menu_no_ul(); ?>
</ul>

Pero el problema viene nuevamente cuando no agrego o activo ningún menú a través de admin. http://domain.com/wp-admin/nav-menus.php

Pregunta:

¿Cómo elimino el <div><ul>**</ul></div> si el menú está activo o no? Déjame saber

Finalmente lo hice funcionar :) functions.php

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary',
        'fallback_cb'=> 'default_page_menu'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

function default_page_menu() {
   wp_list_pages('title_li=');
} 

header.php

<ul class="primary-nav">
<?php  wp_nav_menu_no_ul(); ?>
</ul>
    
pregunta haha 28.01.2011 - 09:32

5 respuestas

10

La función wp_nav_menu toma un argumento de fallback_cb, que es el nombre de la función que se ejecutará si el menú no existe. así que cambia tu código a algo como esto:

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary',
        'fallback_cb'=> 'fall_back_menu'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

function fall_back_menu(){
    return;
}

incluso puedes eliminar el contenedor del menú y hacer otras cosas con algunos argumentos más enviados a la wp_nav_menu function

Espero que esto ayude.

    
respondido por el Bainternet 28.01.2011 - 10:07
49

En realidad, WordPress lo admite de forma predeterminada:

wp_nav_menu(array(
    'items_wrap' => '%3$s'
));

El valor predeterminado para items_wrap es <ul id=\"%1$s\" class=\"%2$s\">%3$s</ul> .

    
respondido por el Martti Laine 07.12.2011 - 16:37
4

El código de abajo debería simplemente hacerlo.

<?php 

  $my_menu = array( 
  'menu' => 'main-menu',
  'container' => '',
  'items_wrap' => '%3$s' 
  );

  wp_nav_menu( $my_menu );

?>

Consulte este enlace para la función wp_nav_menu enlace

    
respondido por el Dannamite 14.05.2014 - 10:06
2

Para mí, lo que funcionó fue esto:

<?php wp_nav_menu( array(
       'container' => '',
       'items_wrap' => '%3$s' 
) ); ?>

Espero que ayude.

    
respondido por el Orbital Pixel 05.04.2014 - 22:58
2

Si desea imprimir solo las etiquetas <a> , puede hacerlo de esta manera:

$primaryMenu = array(
    'theme_location'  => 'primary',
    'menu'            => '',
    'container'       => '',
    'container_class' => false,
    'container_id'    => '',
    'menu_class'      => 'menu',
    'menu_id'         => 'primary-menu',
    'echo'            => false,
    'fallback_cb'     => 'wp_page_menu',
    'before'          => '',
    'after'           => '',
    'link_before'     => '',
    'link_after'      => '',
    'depth'           => 0,
    'walker'          => ''
);
echo strip_tags( wp_nav_menu( $primaryMenu ), '<a>' );
    
respondido por el Pavlo Zamoroka 17.11.2015 - 08:02

Lea otras preguntas en las etiquetas