Title: custom wp_nav_menu
Last modified: 4 Novembre 2016

---

# custom wp_nav_menu

 *  Risolto [francesco5383](https://it.wordpress.org/support/users/francesco5383/)
 * (@francesco5383)
 * [9 anni, 11 mesi fa](https://it.wordpress.org/support/topic/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/](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 9 anni, 11 mesi fa da [francesco5383](https://it.wordpress.org/support/users/francesco5383/).
    -  Questo topic è stato modificato 9 anni, 11 mesi fa da [francesco5383](https://it.wordpress.org/support/users/francesco5383/).

Stai visualizzando 1 risposte (di 1 totali)

 *  [Diego Betto](https://it.wordpress.org/support/users/agm65/)
 * (@agm65)
 * [9 anni, 11 mesi fa](https://it.wordpress.org/support/topic/custom-wp_nav_menu/#post-8247)
 * 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

Stai visualizzando 1 risposte (di 1 totali)

 Il topic ‘custom wp_nav_menu’ è chiuso a nuove risposte.

## Tag

 * [after](https://it.wordpress.org/support/topic-tag/after/)
 * [before](https://it.wordpress.org/support/topic-tag/before/)
 * [wp_nav_menu](https://it.wordpress.org/support/topic-tag/wp_nav_menu/)

 * In: [Aspetto = Temi](https://it.wordpress.org/support/forum/temi/)
 * 1 risposta
 * 2 partecipanti
 * Ultima risposta da: [Diego Betto](https://it.wordpress.org/support/users/agm65/)
 * Ultima attività: [9 anni, 11 mesi fa](https://it.wordpress.org/support/topic/custom-wp_nav_menu/#post-8247)
 * Stato: risolto

## Topic

### Topic più popolari

### Topic senza risposte

### Topic non di supporto

### Topic risolti

### Topic non risolti

### Tutti i topic
