Personalizzare Solo un Menu Specifico usando l'Hook "wp_nav_menu_items"

23 set 2010, 17:14:20
Visualizzazioni: 53K
Voti: 43

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' ) ); 
0
Tutte le risposte alla domanda 2
6
46

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;
}
23 set 2010 17:36:08
Commenti

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

cannyboy cannyboy
23 set 2010 17:45:10

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

Rarst Rarst
23 set 2010 18:25:34

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

User User
5 ott 2011 02:59:49

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

Alain Jacomet Forte Alain Jacomet Forte
26 mar 2014 23:00:51

@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.

Marcus Marcus
25 mag 2014 18:37:08

Usando $args->menu invece di $args->theme_location ho risolto il problema con la versione 4.3

shaunsantacruz shaunsantacruz
21 ago 2015 20:29:52
Mostra i restanti 1 commenti
1

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.

19 dic 2012 22:30:10
Commenti

Vedi l'elemento da @oshi su questa pagina, che è indirizzato a te.

halfer halfer
2 gen 2013 03:39:16