Мои отрывки автоматически генерируются из первых 30 или около того слов из содержания сообщения. Иногда совпадающие условия поиска находятся в этом диапазоне или за его пределами. Я пытаюсь вернуть и выделить только часть текста, содержащего результаты. Поведение по умолчанию позволяет выделить, только если результаты поиска находятся в пределах этих первых 30 слов. Если они находятся вне скобок, я вижу только не относящийся к делу текст. Как я могу выделить в отрывке только соответствующую часть? Результаты поиска работают отлично и, следовательно, возвращают требуемые результаты поиска. У меня только проблема с отображением соответствующих результатов сопоставления внутри выдержки. Я пробовал бесчисленное количество раз, но полагаю, что на данный момент это выходит за рамки моих возможностей.
Вот код, который у меня есть:
function search_excerpt_highlight() {
$excerpt = the_excerpt();
$keys = implode('|', explode(' ', get_search_query()));
$excerpt = preg_replace('/(' . $keys .')/iu', '<strong class="search-highlight">\0</strong>', $excerpt);
echo '<p>' . $excerpt . '</p>';
}
add_action('pre_get_posts', 'search_exact_by_phrase', 1);
function search_exact_by_phrase($query){
if(!is_admin() && $query->is_main_query() && $query->is_search) :
$query->set('sentence', true);
endif;
}
У меня это внутренний поиск. php
search_excerpt_highlight();
И мой стиль. css выглядит так:
strong.search-highlight {
background-color: #fdc058;
font-weight: bold;
}
Пожалуйста, помогите, я застрял на этом этапе.