Formation WordPress

Mettre en évidence les termes dans les résultats de recherche

Pour rendre plus convivial une recherche sur WordPress, vous pouvez mettre en évidence les termes recherchés sur la page des résultats. Dans cet article nous allons vous montrer comment réaliser cela d’une manière simple et efficace.

D’abord, ouvrez votre fichier search.php et ajoutez les lignes suivantes au début de votre fichier :

$keys = implode('|', explode(' ', get_search_query()));
$title = preg_replace('/('.$keys .')/iu', '<span class="search-term">\0</span>', get_the_title());
$excerpt = preg_replace('/('.$keys .')/iu', '<span class="search-term">\0</span>', get_the_excerpt());

Ensuite recherchez les codes suivants :

<?php the_title(); ?>
<?php the_excerpt(); ?>

Remplacez-le par :

<?php echo $title; ?>
<?php echo $excerpt; ?>

Maintenant qu’on a ajouté une class sur nos termes de recherche, on ajoute un peu de CSS pour les mettre en evidence. Copier le code ci-dessous dans votre feuille de style (CSS) :

.search-term {
    background-color: #CCCCCC;
    color: #FFFFFF;
    padding: 3px 5px;
}

Si vous utilisez le contenu de votre article à la place de l’extrait, la technique est exactement la même !

Aperçu de la mise en évidence

Aperçu de la mise en évidence sur la page de recherche

Auteur : Jonathan
Actuellement en Master 1 Information Communication à Ingémédia, je m’intéresse depuis quelques années à différents aspects du milieu informatique qui m’ont vraiment séduits tels que la gestion de projet et la création de sites Internet.
Avatar de jonathan
Les commentaires 13 commentaires sur cet article
  1. slowflex le

    J’ai trouvé cela ce matin :
    Vous en diriez quoi vis à vis de votre méthode ?

    Avatar de
  2. jonathan le

    @Slowflex : Ca fait appel à un fichier javascript et ce n’est vraiment pas nécéssaire dans ce cas de figure.

    Une class et un petit peu CSS, le tour est joué !

    Avatar de
  3. Philippe le

    A priori cela ne supporte pas les accents, comme pour vidéo par exemple.

    Avatar de
  4. jonathan le

    @ Phillipe : ça marche très bien avec les accents, je viens de faire un essai. N’oubliez pas d’ajouter du CSS pour mettre le terme en évidence, ça ne va pas se faire tout seul :)

    Avatar de
  5. Philippe le

    arghh, je dois avoir une erreur dans mon header.

    Avatar de
  6. jonathan le

    Je viens d’ajouter un CSS d’exemple dans l’article.

    Avatar de
  7. zet le

    pour ceux en html5, remplacer la balise span par mark (dont le rôle est de surligner un contenu)

    Avatar de
  8. jonathan le

    @Zet : Bonne remarque !

    Par contre, est-ce vraiment pertinent puisque les pages de résultats de recherche ne sont pas indéxées ?

    Avatar de
  9. olivM le

    pour le titre et l’extrait ca marchera très bien
    mais attention, dans le cas où on affiche le contenu de l’article :
    si le terme recherché est un tag ou un attribut html ( a, div, href, … ) ou même le , cette méthode risque de faire beaucoup de dégat…

    <p>un article qui parle de <a href="http://google.com/">google</&gt;.</p>

    va devenir :
    <p>un article qui parle de <a href="http://<span class="search-term">google</span>.com/"><span class="search-term">google</span></>.</p>

    Avatar de
  10. jonathan le

    @Olivm : La remarque n’est pas fausse.

    Dans ce cas, il faut mettre un petit coup de strip_tags dans le contenu ^^

    Avatar de
  11. krysttof le

    Pour que cela fonctionne, je suis obligé de mettre le code dans ma boucle if…while…

    Avatar de
  12. jonathan le

    Oui c’est normal, je dis bien qu’il faut « rechercher » et « remplacer » et non pas de copier les 2 lignes sans la boucle :)

    Avatar de
  13. krysttof le

    Je me suis mal exprimé, je dois placer les 3 premières lignes de code ($keys=…) dans ma boucle.
    Je ne parlais pas des 2 variables $title et $excerpt

    Avatar de
Laisser un commentaire
Balises autorisées dans les commentaires: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Suivre les commentaires de cet article par E-mail