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.