Modifier l’adresse URL de la page des résultats de recherche
L’adresse URL des résultats de recherche de WordPress peut-être modifié et personnalisé grâce une redirection permanente.
Si vous avez déjà réalisé une recherche sur un site WordPress, vous avez certainement remarqué que les résultats de votre recherche sont accessibles via une adresse de ce type : http://www.mon-site.com/?s=mot
Si cette adresse ne vous donne pas satisfaction pour votre site personnel, il est possible de modifier cette adresse grâce à une petite astuce.
Tout d’abord, il faut savoir que WordPress propose par défaut une écriture plus “jolie” de l’adresse URL des résultats de recherche. Faîtes une recherche avec une adresse de ce type : http://www.mon-site.com/search/mot
Et oui, WordPress ne réécrit pas l’URL et permet d’obtenir les résultats de la recherche du terme “mot”.
Après cette découverte, vous devez avoir envie de pouvoir rediriger automatiquement les résultats de recherche pour obtenir une adresse plus “sympa”.
Pour cela, copier le code suivant dans le fichier functions.php
présent à la racine de votre thème :
[pastacode lang=”php” message=”” highlight=”” provider=”manual”]
add_action('template_redirect', 'gkp_search_url_rewrite_rule');
function gkp_search_url_rewrite_rule() {
global $wp_rewrite;
if ( is_search() && isset( $_GET['s'] ) ) {
$s = str_replace( array( ' ', '%20' ), '+', get_query_var( 's' ) );
wp_redirect( home_url( $wp_rewrite->search_base . '/' . remove_accents ( $s ) ) );
exit();
}
}
add_action('init','gkp_change_search_permalinks');
function gkp_change_search_permalinks( ) {
global $wp_rewrite;
$wp_rewrite->search_base = 'recherche';
}
[/pastacode]
Grâce à cette redirection, les résultats de recherche seront disponibles via l’adresse http://www.mon-site.com/recherche/mot
Pour modifier la base de l’URL de recherche par celle de votre choix, il faut modifier la valeur de $wp_rewrite->search_base
présent en fin de code.
Enfin, pour que le changement soit pris en compte par WordPress, il ne faut pas oublier de mettre à jour les permaliens !
30 Commentaires
Il y a une petite erreur ici : !emptyempty($_GET[‘s’])
un empty en trop.
Merci, c’est le générateur de code qui plante à chaque fois qu’on met un “empty” >_< J'ai modifié par une vérification avec trim() afin d'éviter ce problème.
Merci pour ton astuce!
mais aurait on la possibilité de mettre un autre mot que “search” ?
j’ai essayé mais cela ne fonctionne pas chez moi
@Wilfrid : Malheureusement on ne peut pas ou c’est que je connais pas l’astuce ;)
Attention, le trim sur une variable $_GET non testé déclenche un warning, un “isset()” suffit.
Aussi le “home_url()” n’est pas correctement utilis.
Enfin le “str_replace()” peut contenir un array au lieu de l’appeler X fois pour chaque caraactère à remplacer.
Cela donne :
“Malheureusement on ne peut pas ou c’est que je connais pas l’astuce”
Bon ben je crois que j’ai trouvé le sujet de mon prochain article :p
Oups, j’ai trouvé la solution depuis le temps. J’avais oublié cette astuce. Je vais la mettre à jour ce midi :)
Le code vient d’être mis à jour (testé sur WordPress 3.4.1) avec les suggestions et les recommandations de chacun.
Super ! Merci :)
Ha tiens, j’ai pas fait pareil :)
Haha, il y a toujours plusieurs solutions =D
N’hésite pas à partager un lien vers ton article si tu le fais ;)
mets home_url() pas site_url() ! XD #lechieur
Bon je reviendrai quand tout le monde sera d’accord et que le code sera définitif. d:-)
@Christophe : Le code est définitif ;)
Merci. C’est simple à implémenter en plus. Mon seul souci est que cela ne fonctionne pas avec un module recherche Google personnalisée.
Génial ce truc, on ne pense pas assez à améliorer la recherche sous WordPress. Personellement, j’utilise Relevanssi même s’il est un peu buggué.
Sympa cette solution. Merci pour le code :)
On peut ajouter un paramètre $_GET en plus dans l’url ? Quand je le fais il cherche dans la chaine $_GET[‘monget’].’/’.$str et je voudrais juste qu’il cherche dans $str tout en gardant mon get.
Simplement GE-NI-AL!! Merci encore
Salut, il se trouve que j’ai un problème :x Mon thème lance la recherche sur la variable “?search=” au lieu de “?s=”, ce qui fait qu’il ne trouve pas le template search.php, et renvoie donc à l’accueil du site.
Quelqu’un aurait t’il une idée de comment faire pour changer la variable get dans l’url ? Quel fichier modifier ?
Merci d’avance, Nicolas.
@Nicolas
Vérifie que ton champ texte pour bien le name “s” et pas “search” :
<input type=”text” name=”s”/>
Hello
Lorsque je lance une recherche, au lieu de m’afficher la page de recherche WP m’affiche l’article au titre le plus proche alors que tout fonctionnait bien avant implémentation du code…
Une idée de la source de ce “bug” ?
Merci !
@Smiley Facebook : Ce code ne peut pas interférer sur les résultats de la requête de recherche. Cela doit provenir d’un conflit avec un plugin ou autre.
Merci beaucoup pour cette astuce !!! J’ai pu corriger un bug et cela fait vraiment plus beau.
Allo,
J’ai mis ceci dans la fonction de mon site, mais ça ne fonctionne pas bien avec ma boutique woocommerce. Quand je fais une recherche de produit, ça affiche dans le blog.
Une idée de ce que je peux faire pour afficher ?
Assurez-vous d’insérer le code dans le bon fichier. Il s’agit de functions.php qui se trouve dans le dossier de votre thème.
Si ça ne fonctionne pas, c’est que vous avez déjà un code similaire dans votre thème qui entre en conflit.
Merci beaucoup pour cette astuce
Bonjour,
Parfois on tombe sur des articles qui ne sont plus d’actualité, celui ci n’en fait pas parti (heureusement pour moi) et j’espère pouvoir obtenir un début de réponse à ma question. Le passage du s’ au /search/ s’est passé sans problème. En revanche le passage du search à recherche (ou un autre mot) me renvoi des erreurs 404, j’ai donc remis ça à plus tard. Ma question concerne l’url canonique : je souhaiterai savoir si il existe une possibilité de transformer l’url http://monsite.com/search/je+cherche+un+moyen en http://monsite.com/search/je-cherche-un-moyen … j ai essayé plusieurs combinaisons mais rien ne marche :(
@Eroll: Les pages de recherche sont en général non indéxées. Donc il n’y a pas lieu de s’occuper du lien canonical.
Bonjour Jonathan,
Très bonne astuce. Par contre,l’URL de la page de recherche est en effet correctement ré-écrite sous la forme /recherche/mot-cle mais le template est celui de la page 404 (et non de search.php). dès que je supprime l’astuce le template search s’affiche à nouveau correctement. Une idée de la raison de cette 404 ?
Cordialement,
François
Salut pourrait tu m’aider? maintenant dans l’url ça m’affiche bien recherche/… mais la page ne s’affiche plus et sa marque Not Found. pourquoi merci de ta réponse.