您可以尝试尽早运行该函数,以便它在more
链接已创建。
add_filter(\'the_excerpt\', \'highlight_search_term\',1);
add_filter(\'the_title\', \'highlight_search_term\');
但我认为这并不能解决更深层次的问题,即使它能起作用。该函数非常粗糙,它将替换内部URL和内部标记属性,但它不应该这样做,因为它几乎肯定会导致断开的链接和断开的标记。
以下是一个更复杂、测试最少的版本:
function highlight_search_term_placeholders() {
static $iter = 0;
$ret = "|##{$iter}##|";
$iter++;
return $ret;
}
function highlight_search_term_cb() {
static $iter = 0;
$ret = "##{$iter}##";
$iter++;
return $ret;
}
function highlight_search_term($text){
if(is_search() && !is_admin()){
$keys = implode(\'|\', explode(\' \', get_search_query()));
$pattern = \'/<[^>].*?>/i\';
preg_match_all($pattern,$text,$matches);
$placeholders = array();
foreach ($matches[0] as $v) {
$placeholders[] = highlight_search_term_placeholders();
}
$text = preg_replace_callback($pattern,\'highlight_search_term_cb\',$text);
$pattern2 = \'/(\' . $keys .\')/iu\';
$text = preg_replace($pattern2, \' <span class="search-term">\\1</span> \', $text);
$text = preg_replace($placeholders,$matches[0],$text);
}
return $text;
}
add_filter(\'the_excerpt\', \'highlight_search_term\');
add_filter(\'the_content\', \'highlight_search_term\');
add_filter(\'the_title\', \'highlight_search_term\');
我构建它是为了零碎地操作,所以(希望)它不会取代
<
和
>
标记打开和关闭标记。它将标记移开,替换其他所有内容,然后将标记放回原处。我相信它可以被清理干净,但这只是一个开始。