custom wp_nav_menu
-
Salve,
Sto lavorando ad un semplice tema, in particolare, per quanto riguarda il menu di navigazione mi sono attenuto alle istruzione del Codex https://developer.wordpress.org/reference/functions/wp_nav_menu/ . Non mi serve niente di troppo particolare, vorrei solo evitare che il menu sia organizzato in
<ul>
e<li>
. Per ottenere questo risultato, inizialmente, ho provato così:$menu=wp_nav_menu(array( 'container' => div, 'echo' => false, 'items_wrap' => '%3$s', 'before' => '<span>', 'after' => '</span> | ', 'depth' => 0, ) ); $menu=strip_tags($menu, '<div><span><a>' ); echo $menu;
per qualche motivo, però, gli
<span>
non vengono inseriti fuori dagli<a>
come riportato nel Codex, anzi… non vengono inseriti affatto! Invece i parametri link_before e link_after funzionano come previsto, ma io voglio inserire del testo fuori dagli<a>
e non al loro interno. Data la situazione ho usate le maniere spicce:$menu=wp_nav_menu(array( 'container' => div, 'echo' => false, 'items_wrap' => '%3$s', 'depth' => 0, ) ); $orig=array('<a','</a>'); $sost=array('<span><a', '</a></span> | '); $menu=str_replace($orig, $sost, $menu); $menu=strip_tags($menu, '<div><span><a>' ); echo $menu;
ok, funziona come voglio, ma mi sembra un metodo molto brute force, c’è una soluzione più elegante? Se possibile, eviterei di estendere la classe walker_nav_menu.
-
Questo topic è stato modificato 8 anni, 6 mesi fa da
francesco5383.
-
Questo topic è stato modificato 8 anni, 6 mesi fa da
francesco5383.
-
Questo topic è stato modificato 8 anni, 6 mesi fa da
-
Salve,
in realtà usare Walker_Nav_Menu è molto più semplice ed elegante di quanto possa sembrare oltre che essere potenzialmente compatibile con eventuali modifiche future. Modificare l’output direttamente di una funzione invece non è sempre garantito ne ottimizzato.
class My_Walker_Nav_Menu extends Walker_Nav_Menu { // personalizza il tag che sostuisce il tag li function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) { if (array_search('menu-item-has-children', $item->classes)) { $output .= sprintf("\n<span class='dropdown %s'><a href='%s' class=\"dropdown-toggle\" data-toggle=\"dropdown\" >%s</a>\n", ( array_search('current-menu-item', $item->classes) || array_search('current-page-parent', $item->classes) ) ? 'active' : '', $item->url, $item->title ); } else { $output .= sprintf("\n<span %s><a href='%s'>%s</a>\n", ( array_search('current-menu-item', $item->classes) ) ? '' : '', $item->url, $item->title ); } } // personalizza il tag che sostuisce il tag ul function start_lvl(&$output, $depth) { $indent = str_repeat("\t", $depth); $output .= "\n$indent<div class=\"dropdown-menu\" role=\"menu\">\n"; } }
Lo richiami con
$defaults = array( 'theme_location' => 'primary', 'container' => 'div', 'menu_class' => 'nav navbar-nav main-nav', 'walker' => new My_Walker_Nav_Menu() ); wp_nav_menu( $defaults );
Saluti,
Diego
- Il topic ‘custom wp_nav_menu’ è chiuso a nuove risposte.