Comment puis-je mettre les termes de recherche en surbrillance sans plugin?
15
Ajoutez ces 2 fonctions à vos fonctions.php
function search_excerpt_highlight() {
$excerpt = get_the_excerpt();
$keys = implode('|', explode(' ', get_search_query()));
$excerpt = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">\0</strong>', $excerpt);
echo '<p>' . $excerpt . '</p>';
}
function search_title_highlight() {
$title = get_the_title();
$keys = implode('|', explode(' ', get_search_query()));
$title = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">\0</strong>', $title);
echo $title;
}
Pour utiliser the_content pour vos résultats de recherche, utilisez la fonction ci-dessous:
function search_content_highlight() {
$content = get_the_content();
$keys = implode('|', explode(' ', get_search_query()));
$content = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">\0</strong>', $content);
echo '<p>' . $content . '</p>';
}
Dans votre boucle ou appel <?php search_title_highlight(); ?>
au fichier search.php au lieu de <?php the_title(); ?>
et utilisez <?php search_excerpt_highlight(); ?>
au lieu de<?php the_excerpt(); ?>
Dans votre css, ajoutez la classe search-highlight qui mettra en surbrillance tous les mots recherchés en jaune.
.search-highlight {
background:#FFFF00
}
preg_quote()
à$keys
pour éviter que votre expression régulière explose en cas de caractères spéciaux tels que des parenthèses ou des crochets.the_excerpt
et à lathe_content
place. Quoi qu'il en soit: une belle réponse, mais le commentaire de @Geert pourrait être travaillé dans :)Ce qui précède fonctionne bien. J'ai exécuté le code similaire, mais liez le titre et l'extrait ensemble. Mais il a été détecté lorsque quelqu'un entre dans un espace "" au début ou à la fin d'un terme de requête de recherche.
J'ai donc ajouté cette ligne:
J'espère que cela s'avère utile pour les autres.
la source
Les solutions ci-dessus cassent la page si le terme de recherche apparaît à l'intérieur des balises HTML. Vous devez utiliser quelque chose comme:
la source