Как я могу выделить поисковые термины без плагина?
15
Добавьте эти 2 функции в ваши functions.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;
}
Чтобы использовать the_content для результатов поиска, используйте функцию ниже:
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>';
}
В вашем цикле или в файле search.php вызовите <?php search_title_highlight(); ?>
вместо <?php the_title(); ?>
и используйте <?php search_excerpt_highlight(); ?>
вместо<?php the_excerpt(); ?>
В вашей CSS добавьте класс search-highlight, который выделит все искомые слова желтым цветом.
.search-highlight {
background:#FFFF00
}
preg_quote()
чтобы$keys
предотвратить регулярное выражение вашего регулярного выражения в случае специальных символов, таких как скобки или скобки.the_excerpt
иthe_content
вместо. В любом случае: Хороший ответ, но комментарий от @Geert можно было бы обработать :)Вышеприведенное работает хорошо, я запустил похожий код, но связал заголовок и отрывок вместе. Но обнаружил, что он ломается, когда кто-то вводит пробел "" в начале или конце условия поискового запроса.
Итак, я добавлю эту строку:
Надеюсь, это поможет другим.
источник
Вышеуказанные решения ломают страницу, если поисковый термин появляется внутри тегов HTML. Вы должны использовать что-то вроде:
источник