Come rimuovere UL su wp_nav_menu?

28 gen 2011, 10:32:27
Visualizzazioni: 54.1K
Voti: 23

Ho cercato su questo sito e ho trovato molte risposte per questa domanda. La maggior parte di esse non funziona sul mio tema.

Ecco una soluzione che ho trovato e che funziona secondo le mie necessità.

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 rimuoverà il tag ul all'inizio e alla fine di wp_nav_menu(). Quindi nel mio tema scrivo semplicemente

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

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

Domanda:

Come posso rimuovere <div><ul>**</ul></div> indipendentemente dal fatto che il menu sia attivo o meno? Fatemi sapere


Finalmente ho trovato la soluzione :) 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>
2
Commenti

Perché vuoi rimuovere l'UL quando lo aggiungi comunque di nuovo? Puoi usare i parametri menu_class e menu_id per impostare un attributo classe e/o id sull'UL.

User User
28 gen 2011 15:52:37

Voglio usare superfish. menu_class e menu_id funzioneranno solo se il menu è attivato. Se il menu non esiste menu_class e menu_id non sono applicati a <ul> ma a <div>. Ecco perché ci sono così tante domande su wp_nav_menu() puoi testarlo :)

haha haha
28 gen 2011 16:10:20
Tutte le risposte alla domanda 7
7
80

In realtà, WordPress supporta questa funzionalità di default:

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

Il valore predefinito per items_wrap è <ul id=\"%1$s\" class=\"%2$s\">%3$s</ul>.

7 dic 2011 17:37:47
Commenti

Questa è la risposta corretta. Le altre soluzioni che propongono una sostituzione programmatica per rimuovere il tag <ul> dopo che è già stato aggiunto sono semplicemente approcci sbagliati.

mikemike mikemike
20 mar 2015 12:51:34

'container' => false se vuoi eliminare anche il <div> wrapper.

George Dimitriadis George Dimitriadis
10 ago 2017 13:11:13

È effettivamente configurabile di default in WordPress. Grazie!

Abdalla Arbab Abdalla Arbab
2 apr 2018 14:44:36

miglior risposta, nessun bisogno di hack

Eman Eman
2 feb 2019 04:58:03

non funziona per me in wp 5.2

rafaelphp rafaelphp
30 giu 2019 19:48:34

ho scelto questa come miglior risposta. (WP 5.7)

iamdual iamdual
18 mar 2021 13:37:05

Nota che questo produrrà comunque gli elementi racchiusi in <li>

kontur kontur
21 dic 2024 16:43:16
Mostra i restanti 2 commenti
6
11

La funzione wp_nav_menu accetta un argomento fallback_cb che è il nome della funzione da eseguire se il menu non esiste. Quindi modifica il tuo codice in questo modo:

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 anche rimuovere il container dal menu e fare altre operazioni con altri argomenti passati alla funzione wp_nav_menu

Spero che questo sia di aiuto.

28 gen 2011 11:07:37
Commenti

@בניית אתרים - Grazie per la tua spiegazione. Ma qui sono confuso. Secondo la nota su nav-menu-template.php fallback_cb - Se il menu non esiste, verrà chiamata una funzione di callback. Di default è 'wp_page_menu'. Imposta a false per nessun fallback Cosa dovrei sostituire per far funzionare wp_nav_menu_no_ul() se imposto false a fallback_cb? Perché ora restituisce vuoto.

haha haha
28 gen 2011 13:49:46

Ora ho capito :) Grazie mille בניית אתרים. BTW, come pronuncio il tuo nickname? Il mio è ha ha

haha haha
28 gen 2011 14:08:00

LOL, felice che tu l'abbia presa.

Bainternet Bainternet
28 gen 2011 14:17:27

Mi sono chiesto la stessa cosa, presumo sia ebraico, qual sarebbe una traduzione accurata, per curiosità.. :)

t31os t31os
28 gen 2011 17:55:33

:) sì è ebraico ed è un soprannome che ho scelto tempo fa che, tradotto correttamente, significa qualcosa come "web design".

Bainternet Bainternet
28 gen 2011 18:17:17

Per favore vedi l'altra risposta di Martti su questo. Invece di aggiungere il <ul> e poi usare trova e sostituisci per rimuoverlo di nuovo, dovresti semplicemente non aggiungerlo fin dall'inizio. Fallo usando l'opzione items_wrap

mikemike mikemike
20 mar 2015 12:52:33
Mostra i restanti 1 commenti
0

Il codice seguente dovrebbe semplicemente farlo.

<?php 

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

  wp_nav_menu( $my_menu );

?>

Fai riferimento a questo link per la funzione wp_nav_menu http://codex.wordpress.org/Function_Reference/wp_nav_menu

14 mag 2014 11:06:37
1

Se vuoi stampare solo i tag <a>, 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>' );
17 nov 2015 09:02:21
Commenti

questa soluzione funziona perfettamente per me, impostare solo 'items_wrap' => '%3$s' non ha effetto in wp 5.2

rafaelphp rafaelphp
30 giu 2019 19:50:39
0

Per me quello che ha funzionato è stato questo:

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

Spero ti sia utile.

5 apr 2014 23:58:36
0

So che questa risposta non è completamente pertinente alla domanda, ma ci sono molte persone che vogliono sapere come rimuovere i tag ul e li in WordPress e aggiungere altri tag.

Ad esempio, prima di applicare il mio codice, WordPress restituisce questo tipo di output per i menu

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

Ma se qualcuno vuole cambiare il tag ul in div e li in tag a, allora dovrebbe usare il seguente codice

            <?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 produce un 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>
28 dic 2019 22:41:42
0
<?php
// Definiamo i parametri per il menu di navigazione
$params = array(
    'theme_location' => 'menu_location', // Posizione del tema dove mostrare il menu
    'container' => false,               // Non vogliamo un contenitore wrapper
    'echo' => false,                    // Non stampiamo direttamente ma restituiamo l'output
    'items_wrap' => '%3$s',             // Formattazione degli elementi del menu
);

// Stampiamo il menu rimuovendo tutti i tag HTML eccetto <a> per i link
echo strip_tags(wp_nav_menu($params), '<a>');
?>
13 lug 2024 16:45:50