¿Cómo elimino UL en wp_nav_menu?


18

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 encontré y funciona según mis necesidades.

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 se eliminará ulal principio y al final de wp_nav_menu(). Entonces en mi tema solo escribo

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

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

Pregunta:

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


Finalmente lo conseguí :) 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>

¿Por qué quieres eliminar el UL cuando lo agregas de nuevo? Puede usar los parámetros menu_classy menu_idpara establecer un atributo de clase y / o id en la UL.

Quiero usar superfish. menu_classy menu_idsolo funcionará si el menú está activado. Si el menú no existe menu_classy menu_idno es como <ul>sino como <div>. es por eso que muchas preguntas sobre wp_nav_menu()ti pueden probarlo :)
jaja

Respuestas:


11

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 cambie su 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 puede eliminar el contenedor del menú y hacer otras cosas con algunos argumentos más enviados a la función wp_nav_menu

Espero que esto ayude.


@ בניית אתרים - Gracias por tu explicación. Pero me estoy poniendo borroso aquí. De acuerdo con la nota sobre nav-menu-template.php fallback_cb - If the menu doesn't exists, a callback function will fire. Defaults to 'wp_page_menu'. Set to false for no fallback¿Qué debo reemplazar para que wp_nav_menu_no_ul()funcione si configuro falso en el fallback_cb? Porque vuelve en blanco por ahora.
jaja

Ahora entendido :) Muchas gracias בניית אתרים. Por cierto, ¿cómo pronuncio tu apodo? El míoha ha
jaja

LOL, me alegra que lo hagas.
Bainternet

Me he preguntado lo mismo, que es hebreo supongo, lo que sería una traducción exacta, por curiosidad .. :)
t31os

:) sí, es hebreo y es un nick que aprendí un rato que si se traduce correctamente significa algo así como "diseño web".
Bainternet

57

En realidad, WordPress admite esto de manera predeterminada:

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

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


3
Esta es la respuesta correcta. Las otras respuestas de hacer una búsqueda y reemplazo programático para eliminar <ul>después de que ya se haya agregado son solo hacia atrás
mikemike

'container' => falsesi quieres deshacerte del envoltorio <div>también.
George Dimitriadis

Es verdaderamente configurable en WordPress por defecto. ¡Gracias!
Abdalla Arbab

mejor respuesta, sin necesidad de truco
Eman

esto no me funciona en wp 5.2
rafaelphp


4

Si desea imprimir solo <a>etiquetas, puede ir 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>' );

este trabajo es perfecto para mí, configurar solo `` items_wrap '=>'% 3 $ s '' no tiene efecto en wp 5.2
rafaelphp

2

Para mí lo que funcionó fue esto:

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

Espero eso ayude.


0

Sé que esta respuesta no es completamente para esta pregunta, pero hay muchas personas que saben cómo eliminar la etiqueta ul y li en WordPress y agregar otra etiqueta en WordPress.

Al igual que antes de aplicar mi código, WordPress da estos tipos de salida en el menú

<ul class="*****"><li>abc</li></ul>

Pero alguien quiere cambiar ul en div y li en una etiqueta, entonces debe usar el siguiente código

            <?php

                $menuParameters = array(
                    'menu' => 'primary_menu',
                    'link_before'     => '<span>',
                    'link_after'      => '</span>',
                    'before'        => '<div class="tp-primary-header mui-top-home">',
                    'after'     => '</div>',
                    'container'       => false,
                    'echo'            => false,
                    'depth'           => 0,
                );

                echo strip_tags(wp_nav_menu( $menuParameters ), '<a><span><div>' );
                ?>

Esto da salida en el siguiente formato

<div class="tp-primary-header mui-top-home"><a href="#"><span>ABC</span></a></div>
<div class="tp-primary-header mui-top-home"><a href="#"><span>def</span></a></div>
<div class="tp-primary-header mui-top-home"><a href="#"><span>XYZ</span></a></div>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.