问题描述
如何在不插件的情况下突出显示搜索字词?
最佳解决方案
将这 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"></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"></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"></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
}
次佳解决方案
上面的工作很好,我已经运行相似的代码,但将标题和摘录结合在一起。但是当有人在搜索查询项的开头或结尾进入空格” “ 时发现它会中断。
所以我添加这一行:
$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');
希望这可以帮助别人。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。