Eliminar elemento contenedor de wp_nav_menu () Marca

4

He intentado varias opciones, como configurar 'container' => false y registrar ubicación_tema y buscar en foros, pero no puedo deshacerme del "div" que viene con wp_nav_menu en mi pagina:

<?php get_nav_menu();?>

function get_nav_menu() {
    $navMenuDefaults = array(
    'theme_location'  => 'header-nav',
    'menu'            => '',
    'container'       => false,
    'container_class' => '',
    'container_id'    => '',
    'menu_class'      => '',
    'menu_id'         => '',
    'echo'            => true,
    'fallback_cb'     => 'wp_page_menu',
    'before'          => '',
    'after'           => '',
    'link_before'     => '',
    'link_after'      => '',
    'items_wrap'      => '<ul id="%1$s" class="%2$s">%3$s</ul>',
    'depth'           => 0,
    'walker'          => ''
);
    return wp_nav_menu($navMenuDefaults);
}

y en functions.php:

function register_top_nav() {
  register_nav_menu('header-nav',__( 'Header Nav' ));
}
add_action( 'init', 'register_top_nav' );

No estoy seguro de por qué obtengo el siguiente resultado:

<div class="">
    <ul>
        <li class="page_item page-item-2">
            <a href="url">Sample Page</a>
        </li>
    </ul>
</div>

¿Cómo puedo obtener algo como lo siguiente:

<ul class="abc">
    <li>
        <a href="#">dfdf</a>
    </li>
</ul>

gracias.

    
pregunta me_digvijay 12.09.2015 - 15:50

6 respuestas

3

FYI: container => '' es una operación de cadena y se establece por defecto en div que no puedes usar true or false like bool expression .

Simplemente cambia container => 'ul' y espero que obtengas lo que quieres ver. Para obtener más detalles, lea esto: enlace

Gracias Musa

    
respondido por el MD MUSA 12.09.2015 - 16:13
1

Problema

No has creado un menú en el panel Appearance > Menus en el panel de administración de WordPress .

Mi razonamiento se basa en un error que se produce en las siguientes condiciones:

  • No se han creado menús de navegación
  • Se llamó a wp_nav_menu() con el argumento por defecto 'fallback_cb' 'wp_page_menu'
  • wp_nav_menu() se llamó con un argumento 'container' destinado a eliminar el contenedor (cualquier cosa que la función empty() devuelve true para)

Soluciones

Cualquiera de los siguientes debería eliminar el contenedor <div> .

  • Crea un menú en el panel Appearance > Menus . El extraño <div> debería desaparecer incluso si no asocia el nuevo menú con su ubicación de tema 'header-nav' registrada.
  • Cambie el argumento 'fallback_cb' a una función personalizada que devuelva alguna marca predeterminada, o incluso una cadena vacía, es decir,

    'fallback_cb' => function() { return ''; },
    

Explicación

En el caso de que la función wp_nav_menu() no pueda ubicar el menú indicado, luego intenta hacer dos cosas más para producir el marcado del menú:

  1. Muestra el primer menú completo encontrado.
  2. Marca de menú de visualización generada por la función indicada por el argumento 'fallback_cb' (de forma predeterminada, wp_page_menu() ).

Su marca publicada es para un post-tipo page con una ID de publicación de 2 y el título "Página de muestra", posiblemente indicando una nueva instalación de WordPress, para la cual sería razonable suponer que no se han encontrado menús. creado. Esto indica que su llamada wp_nav_menu() probablemente retroceda a wp_page_menu() , ya que la función de respaldo creará un menú improvisado desde cualquier número de páginas en su instalación.

Cuando se llama a la función 'fallback_cb' , se pasan los mismos argumentos que se dieron a wp_nav_menu() (fusionados con los argumentos predeterminados). Aquí, la documentación del Codex sobre la función wp_page_menu() está un poco desactualizada, ya que a partir de WordPress 4.4.0 la función realmente acepta y maneja un argumento 'container' . Entonces, se llama a wp_page_menu() con el mismo argumento 'container' que le entregó a wp_nav_menu() , que es '' (literal de cadena vacía) o false .

El problema es un comportamiento contradictorio que se deriva de estas líneas en wp_page_menu() :

// Fallback in case 'wp_nav_menu()' was called without a container.
if ( empty( $container ) ) {
    $container = 'div';
}

Entonces, dado que empty() evalúa tanto% boolean false como '' a true , este pequeño seguro cree que estás loco por no querer un contenedor y agrega uno de nuevo en "for" you .

    
respondido por el bosco 19.07.2016 - 07:10
0

Al establecer el "contenedor" en falso, esto debería funcionar a menos que haya un error en cualquier lugar del entorno o un conflicto con otra cosa.

De hecho, he probado esto en Twenty Fifteen y uno de Mis temas de bosque temático.

¿Puede verificar si tiene algún caché interno que no refleje sus cambios de inmediato?

Gracias

    
respondido por el Muntasir Mahmud Aumio 14.09.2015 - 18:28
0

Puedes probar con este escenario.

Paso 1:

Coloque este código en el archivo functions.php de su tema:

add_action( 'after_setup_theme', 'theme_nav_setup' );

if ( ! function_exists( 'theme_nav_setup' ) ){
  function theme_nav_setup() {  
    register_nav_menu( 'header-nav_new', __( 'Main Menu', 'text-domain' ) );
  }
}

Paso 2:

Luego, llama a esto donde puedes ver este menú de salida:

wp_nav_menu( array(
  'menu' => 'header-nav_new',
  'theme_location'    => 'header-nav_new',
  'depth'             => 6,
  'container'         => 'ul',
  'fallback_cb'       => 'wp_page_menu',
  'menu_class'        => 'abc'
 )
);
    
respondido por el MD MUSA 12.09.2015 - 22:56
0

Sí, puedes usar este código

$nav_menu = array(
       'title_li'        => '', 
       'container'       => '',
       'theme_location'  => 'header-nav',   
        'menu_class'     => '',
        'menu_id'        => '',
);                    

wp_nav_menu( $nav_menu );

El código anterior mostrará el menú en formato ul y li sin tener ninguna clase e id para las etiquetas ul y li

    
respondido por el Aftab 30.07.2016 - 20:59
0

Desde mi propia experiencia, si aún no ha asignado el menú a la ubicación de menú registrada, todas las configuraciones de argumentos con el prefijo container no funcionarán. debe asignar su menú creado a la ubicación del menú registrado antes de ver el cambio.

    
respondido por el Pakpoom Tiwakornkit 23.09.2016 - 06:04

Lea otras preguntas en las etiquetas