it-swarm.dev

Personalizzare solo un menu specifico usando il hook "wp_nav_menu_items"?

Grazie ad un po 'di aiuto qui, sono riuscito ad aggiungere una casella di ricerca personalizzata al mio menu principale ... aggiungendo questo alle funzioni 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='Search'></form></li>";
}

Tuttavia, ora ho aggiunto un altro menu per inserire il 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' ) ); 
37
cannyboy

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;
}
40
ampt

Un metodo alternativo per farlo è aggiungere il menu slug al filtro wp_nav_menu_items.

Ad esempio, supponiamo di avere un menu denominato Intestazione e desideri sempre questo menu (indipendentemente dal fatto che sia collegato a una posizione del tema o meno) per visualizzare una casella di ricerca. Puoi farlo aggiungendo il filtro menu, in questo caso header, al filtro.

Il nuovo filtro sarebbe il seguente:

 add_filter ('wp_nav_menu_header_items', 'search_box_function'); 

Si noti la porzione header del nuovo filtro. Questo indica a WordPress quale menu aggiungere alla funzione.

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

7
Justin Kopepasah