web-dev-qa-db-fra.com

Personnaliser uniquement un menu spécifique à l'aide du crochet "wp_nav_menu_items"?

Grâce à de l'aide ici, j'ai réussi à ajouter un champ de recherche personnalisé à mon menu principal ... en l'ajoutant à functions.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>";
}

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' ) ); 
37
cannyboy

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

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'); 

Notez la portion header 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.

7
Justin Kopepasah