A-A+

wordpress相关性的搜索排序

2015年01月21日 PHP开源系统 暂无评论 阅读 26 views 次

wordpress所提供的站内搜索基本上已经满足我们的需要了,最近在夏日博客进行搜索时发现一个问题,比如搜索 www.xiariboke.net/?s=夏日,搜索出来的结果都是按照发布时间来进行排序的,也就是最先发布的文章会先排列出来,如果文章较多,想要找出自己想要的文章就不容易了,其实有个办法可以将其搜索出来的结果按照相关性进行排序。

在其主题 functions.php 文件中插入如下的代码:

/*@搜索结果按相关性排序*/
if(is_search()){
add_filter("posts_orderby_request", "search_orderby_filter");
}
function search_orderby_filter($orderby = ""){
global $wpdb;
$keyword = $wpdb->prepare($_REQUEST["s"]);
return "((CASE WHEN {$wpdb->posts}.post_title LIKE "%{$keyword}%" THEN 2 ELSE 0 END) + (CASE WHEN {$wpdb->posts}.post_content LIKE "%{$keyword}%" THEN 1 ELSE 0 END)) DESC, {$wpdb->posts}.post_date DESC";
}

其中返回的 sql 语句可以看出,是将文章与内容中的搜索词进行了累加,然后再将其进行排序,最后再用时间降序进行追补。

注意:如果在最新版中使用,可能会出现不兼容的情况,可使用如下的两种方法进行解决:

1,把第一行的“if(is_search()){ ”改成 “if(isset($_GET["s"])){”

2,去掉if条件,直接放add_filter(‘posts_orderby_request’, ‘search_orderby_filter’);

标签:

给我留言