Antworten:
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;
}
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
}
the_excerpt
und sein the_content
. Wie dem auch sei: Nice Antwort, aber der Kommentar von @Geert konnte in :) gearbeitet werden
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.
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);
preg_quote()
auf$keys
an, um zu verhindern, dass Ihre Regex bei Sonderzeichen wie Klammern oder Klammern explodiert.