Personnalisation d’un menu spécifique uniquement à l’aide du crochet “wp_nav_menu_items”?

36

Grâce à de l'aide ici, j'ai réussi à ajouter un champ de recherche personnalisé à mon menu principal ... en l'ajoutant à functions.php de mon thème.

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>";
}

Cependant, j'ai maintenant ajouté un autre menu à mettre dans le pied de page, mais le champ de recherche est également ajouté à celui-ci. Comment pourrais-je ajouter le champ de recherche au menu principal uniquement?

Mon code pour enregistrer les menus est:

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

 ) );

..et le code pour afficher le menu secondaire est:

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

Réponses:

41

Pour ajouter uniquement la zone de recherche personnalisée au menu principal, vous pouvez passer le deuxième paramètre fourni par le filtre wp_nav_menu_items et vérifier si l'emplacement_mple est l'emplacement principal.

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;
}
ampt
la source
3
merci, c'est génial ... juste une question de débutant - qu'est-ce que cela 10, 2fait dans le code?
cannyboy
4
10est prioritaire (dix est la valeur par défaut), 2est le nombre d'arguments que la fonction que nous raccordons au filtre accepte.
Rarst
@ ampt, oui, j'ai essayé ça. Ça a marché. presque. Lorsque je me connecte, les liens de mon deuxième menu disparaissent, comment puis-je résoudre ce problème?
1
Notez qu'à partir de WP 3.8, la variable est $ args-> menu au lieu de $ args-> emplacement_thème
Alain Jacomet Forte
@AlainJacometForte En fait, $ args-> menu renvoie l'ID numérique du menu, tandis que $ args-> theme_location renvoie la chaîne, donc cette réponse est toujours correcte telle quelle. Rien n'a changé si vous comparez les chaînes.
Marcus
8

Une autre méthode consiste à ajouter le slug de menu au filtre wp_nav_menu_items.

Par exemple, supposons que vous ayez un menu nommé En-tête et que vous souhaitiez toujours que ce menu (qu’il soit associé à un emplacement de thème ou non) affiche un champ de recherche. Vous pouvez le faire en ajoutant le slug de menu, dans ce cas header, au filtre.

Le nouveau filtre serait comme suit:

add_filter ('wp_nav_menu_header_items', 'search_box_function');
( 'wp_nav_menu_header_items', 'search_box_function' );

Notez la headerportion du nouveau filtre. Ceci indique à WordPress à quel menu ajouter la fonction.

Ce n'est qu'une façon différente d'aborder votre problème actuel.

Justin Kopepasah
la source
Voir l'article de @oshi sur cette page, qui vous est adressé.
Halfer