highlight query in search result more precisley

This commit is contained in:
Jonas Heinrich 2020-07-23 09:59:06 +02:00
parent ef9644c8d7
commit 9423a7bff0

View file

@ -431,22 +431,58 @@ add_action( 'widgets_init', 'kit_widgets_init' );
# Highlight query in search results # Highlight query in search results
function limit_text($text, $limit) { function generate_excerpt($text, $query, $length) {
if (str_word_count($text, 0) > $limit) {
$words = str_word_count($text, 2); $words = explode(' ', $text);
$pos = array_keys($words); $total_words = count($words);
$text = substr($text, 0, $pos[$limit]);
if ($total_words > $length) {
$queryLow = array_map('strtolower', $query);
$wordsLow = array_map('strtolower', $words);
for ($i=0; $i <= $total_words; $i++) {
foreach ($queryLow as $queryItem) {
if (preg_match("/\b$queryItem\b/", $wordsLow[$i])) {
$posFound = $i;
break;
}
}
if ($posFound) {
break;
}
}
if ($i > ($length+($length/2))) {
$i = $i - ($length/2);
} else {
$i = 0;
}
}
$cutword = array_splice($words,$i,$length);
$excerpt = implode(' ', $cutword);
$keys = implode('|', $query);
$excerpt = preg_replace('/(' . $keys .')/iu', '<strong class="tx-indexedsearch-redMarkup">\0</strong>', $excerpt);
$excerptRet = '<p>';
if ($i !== 0) {
$excerptRet .= '... ';
} }
return $text; $excerptRet .= $excerpt . ' ...</p>';
return $excerptRet;
} }
function search_excerpt_highlight() { function search_excerpt_highlight() {
$excerpt = wp_strip_all_tags( get_the_content() ); $length = 32;
$excerpt = limit_text( $excerpt, 32); $text = wp_strip_all_tags( get_the_content() );
$query = explode(' ', get_search_query());
$keys = implode('|', explode(' ', get_search_query())); echo generate_excerpt($text, $query, $length);
$excerpt = preg_replace('/(' . $keys .')/iu', '<strong class="tx-indexedsearch-redMarkup">\0</strong>', $excerpt);
echo '<p>... ' . $excerpt . ' ...</p>';
} }