Answers:
将这两个函数添加到您的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
}
the_excerpt
和的过滤器the_content
。无论如何:好的答案,但是@Geert的评论可以在:)中使用
上面的代码很好,我运行了类似的代码,但是将标题和摘录绑定在一起。但是发现当有人在搜索查询词的开头或结尾输入空格“”时,它就会中断。
所以我添加以下行:
$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');
希望这能帮助别人。
如果搜索词出现在HTML标记内,则上述解决方案会破坏页面。您应该使用类似:
$regEx = '\'(?!((<.*?)|(<a.*?)))(\b'. implode('|', $keys) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'iu';
$text = preg_replace($regEx, '<strong class="search-highlight">\0</strong>', $text);
preg_quote()
于$keys
以防止你的正则表达式在特殊字符,如括号或支架的情况下炸毁。