Risposte:
Aggiungi queste 2 funzioni al tuo function.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;
}
Per usare the_content per i risultati della tua ricerca usa la seguente funzione:
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>';
}
Nel tuo loop o nel file search.php, chiama <?php search_title_highlight(); ?>
invece di <?php the_title(); ?>
e usa <?php search_excerpt_highlight(); ?>
invece di<?php the_excerpt(); ?>
Nel tuo css aggiungi la classe di evidenziazione della ricerca che evidenzierà tutte le parole cercate in giallo.
.search-highlight {
background:#FFFF00
}
the_excerpt
e the_content
invece. Comunque: bella risposta, ma il commento di @Geert potrebbe essere elaborato :)
Quanto sopra funziona bene Ho eseguito il codice simile, ma lego il titolo e l'estratto insieme. Ma ho scoperto che si interrompe quando qualcuno inserisce uno spazio "" all'inizio o alla fine di un termine della query di ricerca.
Quindi ho aggiunto questa riga:
$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');
Spero che questo dimostri di aiutare gli altri.
Le soluzioni precedenti interrompono la pagina se il termine di ricerca appare all'interno dei tag HTML. Dovresti usare qualcosa come:
$regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. implode('|', $keys) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'iu';
$text = preg_replace($regEx, '<strong class="search-highlight">\0</strong>', $text);
preg_quote()
per$keys
evitare che la tua regex esploda in caso di caratteri speciali come parentesi o parentesi.