Come rimuovere UL su wp_nav_menu?
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>
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.

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

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.

@בניית אתרים - 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.

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

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

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

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

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

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>

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