为了突出显示搜索结果页面上的当前搜索词,我找到了以下两个函数。
function search_excerpt_highlight() {
$excerpt = get_the_excerpt();
$keys = implode(\'|\', explode(\' \', get_search_query()));
$excerpt = preg_replace(\'/(\' . $keys .\')/iu\', \'<span class="search-highlight">\\0</span>\', $excerpt);
echo \'<p>\' . $excerpt . \'</p>\';
}
function search_title_highlight() {
$title = get_the_title();
$keys = implode(\'|\', explode(\' \', get_search_query()));
$title = preg_replace(\'/(\' . $keys .\')/iu\', \'<span class="search-highlight">\\0</span>\', $title);
echo $title;
}
使用此选项时,添加到
the_excerpt()
已禁用,例如我添加的自定义更多链接。
现在在我的搜索结果中有这样的纯HTMLwhatever there is class="more-link">
有没有办法解决这个问题?
最合适的回答,由SO网友:s_ha_dum 整理而成
通常,对于像这样的过滤器,内容会被传递到过滤器中,进行处理并传递出去。这或多或少就是过滤器的定义。当然,严格来说这不是真的。你不必接受输入,如果你愿意,你可以删除“输入”内容,尽管大多数时候这可能不是一个好主意。
function search_excerpt_highlight($excerpt) {
$keys = implode(\'|\', explode(\' \', get_search_query()));
$excerpt = preg_replace(\'/(\' . $keys .\')/iu\', \'<span class="search-highlight">\\0</span>\', $excerpt);
echo \'<p>\' . $excerpt . \'</p>\';
}
按照这些函数的编写方式,它们将清除队列中先前执行的任何过滤器处理。也就是说,过滤器被添加到一种执行堆栈中,然后逐个应用。这些过滤器之前的任何内容都将丢失,因为它们不接受信息,而只是用
$excerpt = get_the_excerpt();
和
$title = get_the_title();