it-swarm.com.de

So markieren Sie Suchbegriffe ohne Plugin

Wie kann ich die Suchbegriffe ohne Plugin hervorheben lassen?

15
t-p

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

Rufen Sie in Ihrer Schleife oder search.php-Datei <?php search_title_highlight(); ?> anstelle von <?php the_title(); ?> auf und verwenden Sie <?php search_excerpt_highlight(); ?> anstelle von <?php the_excerpt(); ?>

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

.search-highlight {
    background:#FFFF00  
    }
14
Chris_O

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.

3
Kyzer

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);
2
TAH