Come rimuovo UL su wp_nav_menu?


18

Cerco su questo sito e ho trovato molte risposte a questa domanda. Molti di loro non stanno lavorando sul mio tema.

Ecco una soluzione che ho trovato e funziona in base alle mie esigenze.

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);

}

Questo codice verrà rimosso ulall'inizio e alla fine di wp_nav_menu(). Quindi nel mio tema scrivo e basta

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

Ma il problema si ripresenta quando non aggiungo o attivo alcun menu tramite admin. http://domain.com/wp-admin/nav-menus.php

Domanda:

Come rimuovo <div><ul>**</ul></div>se il menu è attivo o meno. Fammi sapere


Finalmente ho funzionato :) 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>

Perché vuoi rimuovere l'UL quando lo aggiungi nuovamente? È possibile utilizzare i parametri menu_classe menu_idper impostare una classe e / o l'attributo id su UL.

Voglio usare superfish. menu_classe funzionerà menu_idsolo se il menu è attivato. Se il menu non esiste menu_classe menu_idnon è come <ul>ma come <div>. ecco perché troppe domande su di wp_nav_menu()te potrebbero provarlo :)
haha,

Risposte:


11

La funzione wp_nav_menu accetta un argomento di fallback_cb che è il nome della funzione da eseguire se il menu non esiste. quindi cambia il codice in qualcosa del genere:

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;
}

puoi persino rimuovere il contenitore dal menu e fare altre cose con alcuni altri argomenti inviati alla funzione wp_nav_menu

Spero che sia di aiuto.


@ בניית אתרים - Grazie per la tua spiegazione. Ma sto diventando sfocato qui. Secondo la nota su 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 fallbackCosa devo sostituire per wp_nav_menu_no_ul()funzionare se imposto false su fallback_cb? Perché per ora torna vuoto.
haha,

Ora capito :) Grazie mille בניית אתרים. A proposito, come posso pronunciare il tuo soprannome? Il mioha ha
haha

LOL, felice che tu ci vada.
Bainternet,

Mi chiedevo la stessa cosa, credo sia l'ebraico, quale sarebbe una traduzione accurata, per curiosità .. :)
t31os,

:) sì, è ebraico ed è un nick che ho raccolto un po 'di tempo che se tradotto correttamente significa qualcosa come "web design".
Bainternet,

57

In realtà, WordPress supporta questo per impostazione predefinita:

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

L'impostazione predefinita items_wrapè <ul id=\"%1$s\" class=\"%2$s\">%3$s</ul>.


3
Questa è la risposta corretta Le altre risposte a fare una ricerca programmata e sostituire per rimuovere <ul>dopo che è già stata aggiunta sono solo all'indietro
mikemike

'container' => falsese vuoi sbarazzarti anche della confezione <div>.
George Dimitriadis,

È vero configurabile in WordPress per impostazione predefinita. Grazie!
Abdalla Arbab,

migliore risposta, non c'è bisogno di hack
Eman

questo non funziona per me nel wp 5.2
rafaelphp,


4

Se desideri stampare solo <a>tag, puoi procedere in questo modo:

$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>' );

questo lavoro è perfetto per me, impostando solo `` items_wrap '=>'% 3 $ s '`non ha effetto in wp 5.2
rafaelphp

2

Per me ciò che ha funzionato è stato questo:

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

Spero che sia d'aiuto.


0

So che questa risposta non è completamente per questa domanda, ma ci sono così tante persone che vengono a sapere come rimuovere i tag ul e li in WordPress e aggiungere un altro tag in WordPress.

Come prima di applicare il mio codice, WordPress offre questi tipi di output nel menu

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

Ma qualcuno vuole cambiare ul in div e li in un tag, quindi dovresti usare il codice qui sotto

            <?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>' );
                ?>

Questo dà output nel seguente 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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.