Champ de recherche WordPress dans une barre de menu spécifique
J’ai ajouté un champ de recherche à mes barres de menus en utilisant ce code ;
function menu_search($items){
$search = '<li class="menusearch">';
$search .= '<form method="get" id="searchform" action="/">';
$search .= '<input type="text" class="field" name="s" id="s" placeholder="Search" />';
$search .= '<input type="submit" class="menusubmit" name="submit" id="searchsubmit" value="Search" />';
$search .= '</form>';
$search .= '</li>';
return $items . $search;
}
add_filter('wp_nav_menu_items','menu_search');
Mais cela ajoute la barre à tous mes menus, puisque j’utilise plusieurs menus, c’est un problème. Comment puis-je faire en sorte que la barre de recherche n’apparaisse que dans ma barre de navigation principale ?
J’ai essayé d’utiliser le tutoriel trouvé ici;http://www.wpbeginner.com/wp-themes/how-to-add-custom-items-to-specific-wordpress-menus/ mais la barre de recherche ne s’affichera pas dans ma barre de menu plus du tout. Peut-être que j’utilise mal le nom ou l’emplacement du thème, c’est ce qui apparaît dans mon écran de menu « Par défaut (le menu principal) ».
Ceci est le reste de mon fichier de fonctions si nécessaire ;
<?php
ob_start();
if ( function_exists( 'add_image_size' ) ) { add_image_size( 'orbit-custom', 920, 300 ); }
/**
* Add a search bar to the navigation menu.
*
* @since Twenty Twelve 1.0
*/
function menu_search($items){
$search = '<li class="menusearch">';
$search .= '<form method="get" id="searchform" action="/">';
$search .= '<input type="text" class="field" name="s" id="s" placeholder="Search" />';
$search .= '<input type="submit" class="menusubmit" name="submit" id="searchsubmit" value="Search" />';
$search .= '</form>';
$search .= '</li>';
return $items . $search;
}
add_filter('wp_nav_menu_items','menu_search');
// This adds more than one menu location
add_action( 'init', 'register_multiple_menus' );
function register_multiple_menus() {
register_nav_menus(
array(
'footer-nav-mid' => 'Middle Footer Navigation',
'footer-nav-left' => 'Left Footer Navigation',
'footer-nav-right' => 'Right Footer Navigation'
)
);
}
if ( function_exists('register_sidebar') ) {
register_sidebar(array(
'name'=>'Downloads Button Homepage',
'before_widget' => '<div id="%1$s" class="widget %2$s buttons">',
'after_widget' => '</div>',
'before_title' => '<h4 class="widgettitle">',
'after_title' => '</h4>',
));
}
if ( function_exists('register_sidebar') ) {
register_sidebar(array(
'name'=>'Locator Button Homepage',
'before_widget' => '<div id="%1$s" class="widget %2$s buttons">',
'after_widget' => '</div>',
'before_title' => '<h4 class="widgettitle">',
'after_title' => '</h4>',
));
}
if ( function_exists('register_sidebar') ) {
register_sidebar(array(
'name'=>'Specials Button Homepage',
'before_widget' => '<div id="%1$s" class="widget %2$s buttons">',
'after_widget' => '</div>',
'before_title' => '<h4 class="widgettitle">',
'after_title' => '</h4>',
));
}
if ( function_exists('register_sidebar') ) {
register_sidebar(array(
'name'=>'Store Locator',
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h4 class="widgettitle">',
'after_title' => '</h4>',
));
}
if ( function_exists('register_sidebar') ) {
register_sidebar(array(
'name'=>'Email Me',
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h4 class="widgettitle">',
'after_title' => '</h4>',
));
}
if ( function_exists('register_sidebar') ) {
register_sidebar(array(
'name'=>'Download Left',
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h4 class="widgettitle">',
'after_title' => '</h4>',
));
}
if ( function_exists('register_sidebar') ) {
register_sidebar(array(
'name'=>'Download Mid',
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h4 class="widgettitle">',
'after_title' => '</h4>',
));
}
if ( function_exists('register_sidebar') ) {
register_sidebar(array(
'name'=>'Download Right',
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h4 class="widgettitle">',
'after_title' => '</h4>',
));
}
if (
!isset( $_POST['custom_meta_box_nonce'] )
|| !wp_verify_nonce( $_POST['custom_meta_box_nonce'], basename(__FILE__) )
)
?>
Solution n°1 trouvée
Vous pouvez passer le 2ème paramètre ( $args ) au filtre wp_nav_menu_items, pour vérifier si la valeur theme_location est la bonne.
function menu_search($items, $args){
if( $args->theme_location == 'YOUR THEME LOCATION VALUE' ){
$search = '<li class="menusearch">';
$search .= '<form method="get" id="searchform" action="/">';
$search .= '<input type="text" class="field" name="s" id="s" placeholder="Search" />';
$search .= '<input type="submit" class="menusubmit" name="submit" id="searchsubmit" value="Search" />';
$search .= '</form>';
$search .= '</li>';
}
return $items . $search;
}
add_filter('wp_nav_menu_items','menu_search', 10, 2);
J’espère que cela aide!
Solution n°2 trouvée
Lorsque vous utilisez add_filter
, vous devez indiquer à WordPress de fournir la fonction de rappel avec la variable $args. Bref, essayez ceci :
function menu_search($items, $args){
if( $args->theme_location == 'footer-nav-mid') {
$search = '<li class="menusearch">';
$search .= '<form method="get" id="searchform" action="/">';
$search .= '<input type="text" class="field" name="s" id="s" placeholder="Search" />';
$search .= '<input type="submit" class="menusubmit" name="submit" id="searchsubmit" value="Search" />';
$search .= '</form>';
$search .= '</li>';
}
return $items;
}
add_filter('wp_nav_menu_items','menu_search', 10, 2); // <-- the 10 is the default priority, the 2 is the number of variables to pass to the callback function.
Remplacez » footer-nav-mid » par le slug de l’emplacement de votre menu. Ceci est défini lorsque vous enregistrez votre menu en utilisant register_nav_menu()
:
register_nav_menu('footer-nav-mid', 'Middle Footer Navigation');
J’espère que cela t’aides!
Solution n°3 trouvée
C’est une solution beaucoup plus simple – ajoutez ce qui suit à votre fichier functions.php :
add_filter('wp_nav_menu_items','add_search_box_to_menu', 10, 2);
function add_search_box_to_menu( $items, $args ) {
if( $args->theme_location == 'primary' )
return $items."<li class='menu-header-search'>".get_search_form(false)."</li>";
return $items;
}
Dans cette fonction, vous verrez que l’instruction IF vérifie l’emplacement souhaité – plus précisément, cet exemple vérifie le menu principal :
if( $args->theme_location == 'primary' )
Vous pouvez également utiliser quelque chose comme ceci pour déterminer quel menu :
$args->menu->slug == the_menu_slug
S’il y a un menu principal, il renvoie tout ce que vous avez entre les guillemets « return $items »:
return $items."<li class='menu-header-search'>".get_search_form(false)."</li>";
Dans ce cas, j’ai créé un élément de liste et concaténé la fonction WP get_search_form() .
Plus important encore, pour que cela soit affiché dans votre menu en tant qu’élément de liste, vous devez définir get_search_form() sur false :
get_search_form(false)
C’est à cause de l’argument suivant dans la fonction get_search_form() :
$echo (bool) (Facultatif) Par défaut, echo et ne renvoie pas le formulaire. Valeur par défaut : vrai
- Source (https://developer.wordpress.org/reference/functions/get_search_form/)
Cela permettra d’atteindre avec succès le formulaire de recherche souhaité dans n’importe quel menu particulier.
0 commentaire