Personnaliser les fonctions de recherche de WordPress

25 avril 2010 , 13 commentaires
Un sympathique lecteur me pose la question :

Pouvez vous me dire si il est possible d’assigner deux catégories à un article dans wordpress sans lien hiérarchique entre ces deux catégories ? Le but est de pouvoir lors de la recherche recherche, filtrer sur l’une ou l’autre catégorie, ou les deux.

Question intéressante qui me permet aujourd’hui de montrer comment personnaliser la recherche dans WordPress.

Un billet, plusieurs catégories

WordPress permet d’assigner plusieurs catégories à un même billet. Dans l’interface d’édition d’un billet, il suffit de cocher deux catégories différentes dans la boîte catégorie. Jusque là, rien de bien compliqué.

Template Hierarchy

WordPress fonctionne avec ce qu’on appele la « template hierarchy« . Selon le type de contenu demandé, WordPress affichera la requête avec tel ou tel template (les templates sont l’ensemble des fichiers php constituant un thème).

Si l’on souhaite afficher une image,  une fois la requête identifiée, WordPress cherchera d’abord  le template image.php, si celui-ci n’existe pas, ce sera le template attachment.php, si celui-ci n’existe pas ce sera le template single.php enfin si celui-ci n’existe pas WordPress utilisera le template index.php.

Des templates pour la recherche

De même qu’il existe un template pour les images, il existe également un template spécifique pour les résultats de recherche : search.php (si celui-ci n’existe pas, WordPress appellera… index.php wala, vous avez compris :).

Le formulaire de recherche est affiché à l’aide de la fonction <?php get_search_form(); ?> laquelle au final n’est qu’une include php qui affiche le template searchform.php. Ce n’est pas obligatoire, beaucoup de thèmes affichent le code du formulaire de recherche en dur dans le header  ou la sidebar, mais c’est plus propre de procéder ainsi.

Le code du formulaire de recherche ressemble à ça :
<form action="<?php bloginfo('url'); ?>" method="get" accept-charset="utf-8">
<div><input type="search" name="s" value="Entrez votre recherche ici" id="s" acceskey="s" /> <button type="submit"  >Rechercher &rarr;</button></div>
</form>

  1. le paramètre action du formulaire est toujours la racine de votre site ici affichée à l’aide de la fonction bloginfo(‘url’),
  2. la chaîne de recherche est entrée via un input dont le nom est « s »

Voilà, vous avez un formulaire de recherche.

Comment faire pour affiner la recherche par catégorie ?

Il suffit d’ajouter un champs au formulaire de recherche :

<input type="hidden" name="cat" value="22" />

  1. name= »cat » permet de forcer WordPress à rechercher dans une catégorie précise
  2. dont l’identifiant est 22 : value = 22

Dans ce cas, la catégorie est affichée dans un champs caché. Vous  pouvez également permettre à  l’utilisateur de choisir la catégorie qui l’intéresse en affichant un champs de type select formaté comme suit :

<select name="cat">
<option value="1">Nom de la catégorie dont l'identifiant est 1</option>
<option value="2"> Nom de la catégorie dont l'identifiant est 2</option>
<option value="3"> Nom de la catégorie dont l'identifiant est 3</option>
</select>

On peut générer ce genre de champs soit  à la main, soit – plus propre – à l’aide de la fonction get_categories (et avec un peu de php quand même).

Comment effectuer un recherche dans plusieurs catégories à la fois ?

Il suffit de passer plusieurs identifiants séparés par une virgule :

<input type="hidden" name="cat" value="22,30,12" />

Dans ce cas, on effectue une recherche dans les catégories 22, 30 ou 12. Le mot « ou » en gras dans la phrase précédente est important : les résultats affichés seront contenus dans la catégorie 22 ou dans la catégorie 30 ou dans la catégorie 12. Si vous souhaitez rechercher un terme qui n’apparaît que dans un billet appartenant lui même à la catégorie 22, 30 et 12, il va vous falloir en passer par une bonne vieille requête sql à l’ancienne.

Eviter de personnaliser la recherche

Je déconseille de proposer ce genre de fonctionnalité sur un site. Pour avoir dans une vie antérieure mis en place ce genre de dispositif sur des sites à fort trafic, il s’avère que les utilisateurs ne sélectionnent que très rarement une catégorie spécifique pour leur recherche. En effet, nous sommes tous habitués au fonctionnement google : un champs de recherche dans lequel on entre un ou plusieurs mots, point barre. Plus c’est simple, mieux ça marche.

Par ailleurs, si vous souhaitez personnaliser les fonctions de recherche de votre site propulsé par WordPress, là encore un conseil : utiliser un service tiers. WordPress est très efficace pour faire de la publication de contenu mais comme tout CMS, la recherche n’est pas son point fort. Le meilleur là dedans, c’est encore google.

Réagissez

Si ce billet vous a plu ou si vous voulez apporter des précisions, ou si vous n’êtes pas d’accord avec ce que je raconte, c’est ici qu’il faut vous manifester. Je me réserve toutefois le droit de supprimer toute contribution insultante ou qui n’aurait rien à voir avec la choucroute.

  1. Personnaliser les fonctions de recherche de WordPress http://bit.ly/am4ujf (by @Barbayellow)

  2. RT @Barbayellow Personnaliser les fonctions de recherche de WordPress http://bit.ly/am4ujf @br1o

  3. Merci pour l’article,

    dans le même esprit il y a un plugin WordPress que je viens de découvrir (ca veut pas dire qu’il est récent ;p ) : WP Custom Fields Search.

    Testé en local, il semble satisfaisant, il faudra le pousser dans ses derniers retranchements 🙂

    Dans le cadre d’un blog, cela semble toutefois démesuré…

  4. […] Barbayellow nous montre comment personnaliser la fonction “recherche” de WordPress. Il nous explique tout ce qu’il est possible de faire. Cependant il met en garde sur cette utilisation spécifique qui peut bouleverser certaines habitudes et nous indique les limites de telles personnalisations. A étudier avec des pincettes donc, mais il est intéressant de connaître les possibilités offertes par notre CMS. […]

  5. […] Barbayellow nous montre comment personnaliser la fonction “recherche” de WordPress. Il nous explique tout ce qu’il est possible de faire. Cependant il met en garde sur cette utilisation spécifique qui peut bouleverser certaines habitudes et nous indique les limites de telles personnalisations. A étudier avec des pincettes donc, mais il est intéressant de connaître les possibilités offertes par notre CMS. […]

  6. […] Barbayellow nous montre comment personnaliser la fonction “recherche” de WordPress. Il nous explique tout ce qu’il est possible de faire. Cependant il met en garde sur cette utilisation spécifique qui peut bouleverser certaines habitudes et nous indique les limites de telles personnalisations. A étudier avec des pincettes donc, mais il est intéressant de connaître les possibilités offertes par notre CMS. […]

  7. Ha bah merci à nouveau, je vais y jeter un oeil et le tester dès ce soir ^^
    Je suis en train de tester Custom Field Search sur un projet immo et j’avoue être bluffé ! Notre petit WordPress est devenu bien grand avec l’age 🙂

  8. Cela dit il manque toujours la possibilité d’effectuer une véritable recherche multi-critères, autrement dit : je cherche dans la catégorie A et dans la categorie B et dans la catégorie C avec, en bonus, la possibilité de rechercher une valeur comprises entre deux bornes :
    Exemple :
    Recherche d’un appartement à Bandol, de type 4, entre 295000 et 350000 Euros
    Catégorie A : type de bien (appartement)
    Catégorie B : ville (Bandol)
    Catégorie C : taille du bien (T4)
    Valeur : le prix du bien …

    Cela reste possible à développer, mais c’est toujours assez pénible…
    http://dev.av-immo.com par exemple

    A lire aussi sur ce sujet : http://www.acs04.fr/?p=1132

  9. Barbayellow nous montre comment personnaliser la fonction “recherche” de WordPress. Il nous explique tout ce qu’il est possible de faire. Cependant il met en garde sur cette utilisation spécifique qui peut bouleverser certaines habitudes et nous indique les limites de telles personnalisations.

  10. Bonjour et merci pour tes articles.
    Je pense qu’une petite mise à jour serait intéressante, car tu écris :
    Si vous souhaitez rechercher un terme qui n’apparaît que dans un billet appartenant lui même à la catégorie 22, 30 et 12, il va vous falloir en passer par une bonne vieille requête sql à l’ancienne. »
    Il me semble bien que maintenant (en 3.5++), on peut mettre par exemple « 22+30+12 » pour préciser un AND entre les catégories, au lieu du « 22,30,12 » pour un OR.

    Mais en 2010, ça n’existait pas je pense !

    HTH,
    M.

  11. Merci pour ce post.

    Je recherche le moyen d’intégrer les champs personnalisés d’ACF dans les résultats de recherche.

    La recherche native de WordPress ne va tenir compte que du titre et du contenu du post/article, mais pas des custom fields du post/article.

    Si quelqu’un a déjà eu à faire à ce challenge, contactez moi !

    bonjour@thibautsoufflet.fr

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.