Comment mettre en évidence les termes de recherche sans plugin

14

Comment puis-je mettre les termes de recherche en surbrillance sans plugin?

    
posée t-p 01.05.2011 - 04:18

3 réponses

14

Ajoutez ces 2 fonctions à votre functions.php

function search_excerpt_highlight() {
    $excerpt = get_the_excerpt();
    $keys = implode('|', explode(' ', get_search_query()));
    $excerpt = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">
function search_content_highlight() {
        $content = get_the_content();
        $keys = implode('|', explode(' ', get_search_query()));
        $content = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">
.search-highlight {
    background:#FFFF00  
    }
</strong>', $content); echo '<p>' . $content . '</p>'; }
</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">
function search_excerpt_highlight() {
    $excerpt = get_the_excerpt();
    $keys = implode('|', explode(' ', get_search_query()));
    $excerpt = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">
function search_content_highlight() {
        $content = get_the_content();
        $keys = implode('|', explode(' ', get_search_query()));
        $content = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">
.search-highlight {
    background:#FFFF00  
    }
</strong>', $content); echo '<p>' . $content . '</p>'; }
</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">%pre%</strong>', $title); echo $title; }
</strong>', $title); echo $title; }

Modifier:

Pour utiliser the_content dans vos résultats de recherche, utilisez la fonction ci-dessous:

%pre%

Dans votre boucle ou votre fichier search.php, appelez <?php search_title_highlight(); ?> au lieu de <?php the_title(); ?> et utilisez <?php search_excerpt_highlight(); ?> au lieu de <?php the_excerpt(); ?>

Dans votre css, ajoutez la classe de recherche-surlignage qui mettra en surbrillance tous les mots recherchés en jaune.

%pre%     
réponse donnée Chris_O 01.05.2011 - 04:38
3

Ce qui précède fonctionne bien. J'ai utilisé un code similaire, mais nouez le titre et l'extrait ensemble. Mais cela se casse 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:

$keys = array_filter($keys);
// Add Bold to searched term
function highlight_results($text){
     if(is_search() && !is_admin()){
     $sr = get_query_var('s');
     $keys = explode(" ",$sr);
     $keys = array_filter($keys);
     $text = preg_replace('/('.implode('|', $keys) .')/iu', ''.$sr.'', $text);
     }
     return $text;
}
add_filter('the_excerpt', 'highlight_results');
add_filter('the_title', 'highlight_results');

J'espère que cela aidera les autres.

    
réponse donnée Kyzer 09.12.2014 - 03:20
2

Les solutions ci-dessus cassent la page si le terme recherché apparaît dans les balises HTML. Vous devriez utiliser quelque chose comme:

      $regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. implode('|', $keys) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'iu';
      $text = preg_replace($regEx, '<strong class="search-highlight">
      $regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. implode('|', $keys) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'iu';
      $text = preg_replace($regEx, '<strong class="search-highlight">%pre%</strong>', $text);
</strong>', $text);
    
réponse donnée TAH 27.07.2015 - 17:47

Lire d'autres questions sur les étiquettes