So markieren Sie Suchbegriffe ohne Plugin

15

Wie kann ich die Suchbegriffe ohne Plugin hervorheben lassen?

tp
quelle

Antworten:

14

Fügen Sie diese 2 Funktionen Ihrer functions.php hinzu

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;
}

Bearbeiten:

Verwenden Sie die folgende Funktion, um den Inhalt für Ihre Suchergebnisse zu verwenden:

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>';
    }

In der Schleife oder search.php Dateiaufruf <?php search_title_highlight(); ?>statt <?php the_title(); ?>und Nutzung <?php search_excerpt_highlight(); ?>statt<?php the_excerpt(); ?>

Fügen Sie in Ihrem CSS die Suchhervorhebungsklasse hinzu, die alle gesuchten Wörter in Gelb hervorhebt.

.search-highlight {
    background:#FFFF00  
    }
Chris_O
quelle
3
Wenden Sie preg_quote()auf $keysan, um zu verhindern, dass Ihre Regex bei Sonderzeichen wie Klammern oder Klammern explodiert.
Geert
1
Was ist mit dem Hervorheben des Suchbegriffs, nachdem der Benutzer auf die Single geklickt hat und den Beitrag aufgerufen hat? Dann gibt get_search_query () eine leere Zeichenfolge zurück
Maor Barazany
1
Das sollten Filter für the_excerptund sein the_content. Wie dem auch sei: Nice Antwort, aber der Kommentar von @Geert konnte in :) gearbeitet werden
kaiser
1
Es wendet <strong class = "search-highlight"> Code in unserem Readmore-Link an, auch wenn er einen Suchbegriff enthält. Wie können wir das lösen?
1
ersetzt es den text in der readmore href auch? Wie kann man das beheben?
Naveen
3

Das obige funktioniert gut. Ich habe den ähnlichen Code ausgeführt, aber den Titel und den Auszug zusammengefügt. Aber gefunden, es bricht ab, wenn jemand ein Leerzeichen "" entweder am Anfang oder am Ende eines Suchbegriffs eingibt.

Also habe ich diese Zeile hinzugefügt:

$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');

Hoffe, dies erweist sich als hilfreich für andere.

Kyzer
quelle
2

Die obigen Lösungen unterbrechen die Seite, wenn der Suchbegriff in HTML-Tags enthalten ist. Sie sollten etwas verwenden wie:

      $regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. implode('|', $keys) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'iu';
      $text = preg_replace($regEx, '<strong class="search-highlight">\0</strong>', $text);
TAH
quelle
1
Danke Kumpel du hast meinen Tag gemacht :-)
Agha Umair Ahmed