Personalizzare Solo un Menu Specifico usando l'Hook "wp_nav_menu_items"
Grazie ad alcuni aiuti ricevuti qui, sono riuscito ad aggiungere una casella di ricerca personalizzata al mio menu principale... aggiungendo questo al file functions.php del mio tema
add_filter('wp_nav_menu_items','search_box_function');
function search_box_function ($nav){
return $nav."<li class='menu-header-search'><form action='http://example.com/' id='searchform' method='get'><input type='text' name='s' id='s' placeholder='Cerca'></form></li>";
}
Tuttavia, ora ho aggiunto un altro menu da inserire nel footer, ma la casella di ricerca viene aggiunta anche a questo. Come posso aggiungere la casella di ricerca solo al menu principale?
Il mio codice per registrare i menu è:
register_nav_menus( array(
'primary' => __( 'Navigazione Primaria', 'twentyten' ),
'secondary'=>__('Menu Secondario', 'twentyten' ),
) );
..e il codice per visualizzare il menu secondario è:
wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'secondary' ) );
Per aggiungere la casella di ricerca personalizzata solo al menu principale, puoi utilizzare il secondo parametro fornito dal filtro wp_nav_menu_items e verificare se theme_location corrisponde alla posizione primaria
add_filter('wp_nav_menu_items','search_box_function', 10, 2);
function search_box_function( $nav, $args ) {
if( $args->theme_location == 'primary' )
return $nav."<li class='menu-header-search'><form action='http://example.com/' id='searchform' method='get'><input type='text' name='s' id='s' placeholder='Cerca'></form></li>";
return $nav;
}

grazie, è fantastico... solo una domanda da principiante - cosa fa il 10, 2
nel codice?

10
è la priorità (dieci è il valore predefinito), 2
è il numero di argomenti che la funzione a cui stiamo agganciando il filtro accetta.

@ampt, Sì, l'ho provato. Ha funzionato. quasi. Quando faccio il login, i link del mio secondo menu scompaiono, come posso risolvere?

Nota che a partire da WP 3.8, la variabile è $args->menu invece di $args->theme_location

@AlainJacometForte In realtà, $args->menu restituisce l'ID numerico del menu, mentre $args->theme_location restituisce la stringa, quindi questa risposta è ancora corretta così com'è. Non è cambiato nulla se stai confrontando le stringhe.

Un metodo alternativo per farlo è aggiungere lo slug del menu al filtro wp_nav_menu_items.
Ad esempio, supponiamo che tu abbia un menu chiamato Header e vuoi che questo menu (indipendentemente dal fatto che sia associato a una posizione del tema o meno) mostri sempre una casella di ricerca. Puoi farlo aggiungendo lo slug del menu, in questo caso header
, al filtro.
Il nuovo filtro sarà il seguente:
add_filter( 'wp_nav_menu_header_items', 'search_box_function' );
Nota la parte header
del nuovo filtro. Questo indica a WordPress a quale menu aggiungere la funzione.
Questo è solo un modo diverso per affrontare il tuo problema attuale.
