Tout savoir sur WordPress
Tutoriel WordPress

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 !

Cet article a été mis à jour il y a 4300 jours - Il n'est peut être plus à jour !

Article écrit par Jonathan B.

Jonathan est le co-fondateur de WP Media, startup connue pour être l’auteur de WP Rocket et Imagify. Il est aussi co-organisateur du WordCamp Lyon et Paris.

30 Commentaires

  1. 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.

  2. 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

  3. 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 :

    function search_url_rewrite_rule() {
    	if ( is_search() && isset( $_GET['s'] ) ) {
    		$s = str_replace( array( ' ', '%20' ), '+', get_query_var( 's' ) );
    		wp_redirect( home_url( 'search/' . $s ) );
    		exit();
    	}
    }
    add_action( 'template_redirect', 'search_url_rewrite_rule' );
    
  4. “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

  5. Oups, j’ai trouvé la solution depuis le temps. J’avais oublié cette astuce. Je vais la mettre à jour ce midi :)

  6. Le code vient d’être mis à jour (testé sur WordPress 3.4.1) avec les suggestions et les recommandations de chacun.

  7. Haha, il y a toujours plusieurs solutions =D

    N’hésite pas à partager un lien vers ton article si tu le fais ;)

  8. Merci. C’est simple à implémenter en plus. Mon seul souci est que cela ne fonctionne pas avec un module recherche Google personnalisée.

  9. 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.

  10. 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.

  11. @Nicolas
    Vérifie que ton champ texte pour bien le name “s” et pas “search” :
    <input type=”text” name=”s”/>

  12. 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 !

  13. @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.

  14. 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 ?

  15. 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.

  16. 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 :(

  17. @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.

  18. 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

  19. 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.