突出显示Function.php中的搜索结果

时间:2013-05-01 作者:Ray

我在网上找到了这个函数。我已将其与函数分开放置在自定义函数文件中。php。

function highlight_search_term($text){
    if(is_search()){
        $keys = implode(\'|\', explode(\' \', get_search_query()));
        $text = preg_replace(\'/(\' . $keys .\')/iu\', \'<span class="search-term">\\1</span>\', $text);
    }
    return $text;
}
add_filter(\'the_excerpt\', \'highlight_search_term\');
add_filter(\'the_title\', \'highlight_search_term\');
它工作正常,只是改变了“阅读更多”链接。将鼠标悬停在此链接上会显示:

http://www.mysite.com/%3span%20classs=
移除后,链接不受影响。它怎么了?我使用了以下CSS:

.search-term {
    background: yellow;
}

1 个回复
SO网友:s_ha_dum

您可以尝试尽早运行该函数,以便它在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\');
我构建它是为了零碎地操作,所以(希望)它不会取代<> 标记打开和关闭标记。它将标记移开,替换其他所有内容,然后将标记放回原处。我相信它可以被清理干净,但这只是一个开始。

结束

相关推荐

Search outside of the "loop"

我正在创建一个只使用Wordpress后端的博客。我找到了获取最新帖子(wp\\u get\\u recent\\u posts)和我所需的所有数据的函数。我通过包含wp负载来实现这一点,这样我就可以访问wp的功能。然而,我找不到任何允许我在Wordpress的主题循环之外进行搜索的内容,因为我对其余的数据进行了搜索。我希望有一个搜索功能,我可以通过它传递一个搜索查询,可以是标题、正文内容或标签名。如果我在文档中遗漏了一些显而易见的东西,那么在WP的“循环”之外,似乎还有一个功能可以满足我需要的所有其他东