Personalizzare solo un menu specifico usando l'hook “wp_nav_menu_items”?


36

Grazie ad un aiuto qui, sono riuscito ad aggiungere una casella di ricerca personalizzata al mio menu principale ... aggiungendo questo alle funzioni del mio tema.php

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='Search'></form></li>";
}

Tuttavia, ora ho aggiunto un altro menu da inserire nel piè di pagina, ma la casella di ricerca viene aggiunta anche a questo. Come aggiungerei la casella di ricerca solo al menu principale?

Il mio codice per la registrazione dei menu è:

register_nav_menus( array(
  'primary' => __( 'Primary Navigation', 'twentyten' ),
  'secondary'=>__('Secondary Menu', 'twentyten' ),

 ) );

..e il codice per visualizzare il menu secondario è:

wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'secondary' ) ); 

Risposte:


41

Per aggiungere solo la casella di ricerca personalizzata al menu principale, è possibile passare il secondo parametro fornito dal filtro wp_nav_menu_items e verificare se la posizione del tema è la posizione principale

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='Search'></form></li>";

    return $nav;
}

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

4
10è la priorità (dieci è l'impostazione predefinita), 2è il numero di argomenti che la funzione che stiamo collegando al filtro accetta.
Rarst

@ ampt, Sì, l'ho provato. Ha funzionato. quasi. Quando eseguo l'accesso, i miei secondi collegamenti di menu scompaiono, come posso risolverlo?

1
Si noti che a partire da WP 3.8, la variabile è $ args-> menu invece di $ args-> theme_location
Alain Jacomet Forte

@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'è. Nulla è cambiato se si confrontano le stringhe.
Marcus,

8

Un metodo alternativo per farlo è l'aggiunta della lumaca di menu al filtro wp_nav_menu_items.

Ad esempio, supponiamo che tu abbia un menu chiamato Intestazione e desideri sempre che questo menu (sia collegato a una posizione del tema o meno) visualizzi una casella di ricerca. Puoi farlo aggiungendo la barra dei menu, in questo caso header, al filtro.

Il nuovo filtro sarebbe il seguente:

add_filter ( 'wp_nav_menu_header_items' , 'search_box_function' );   

Notare la headerparte del nuovo filtro. Questo dice a WordPress a quale menu aggiungere la funzione.

Questo è solo un modo diverso di affrontare il tuo problema attuale.


Vedi l'articolo di @oshi in questa pagina, che è indirizzato a te.
Halfer
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.