增强 wordpress 的搜索,让搜索结果更加精准 -云顶国际

wordpress自带的搜索功能其实比较简单,搜索的结果就是包含搜索词的文章、页面,按照时间发布顺序排序,下面,我们将介绍如何增强wordpress的搜索,让搜索结果更加精准。

增加wordpress搜索的关联性

本身的搜索结果是按照发布时间排序的,这样的搜索结果的相关性并不强,应该让搜索结果按照内容相关性排序,而不是按照时间或者 id,所以我们可以在当前主题的 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_modified desc, {$wpdb->posts}.id asc";
}

只搜索文章

只搜索文章的标题,将下面的代码添加到主题的 functions.php 文件即可:

/**
* 让  只搜索文章的标题
* http://www.wpdaxue.com/search-by-title-only.html
*/
function __search_by_title_only( $search, &$wp_query )
{
global $wpdb;
if ( empty( $search ) )
return $search; // skip processing - no search term in query
$q = $wp_query->query_vars;
$n = ! empty( $q['exact'] ) ? '' : '%';
$search =
$searchand = '';
foreach ( (array) $q['search_terms'] as $term ) {
$term = esc_sql( like_escape( $term ) );
$search .= "{$searchand}($wpdb->posts.post_title like '{$n}{$term}{$n}')";
$searchand = ' and ';
}
if ( ! empty( $search ) ) {
$search = " and ({$search}) ";
if ( ! is_user_logged_in() )
$search .= " and ($wpdb->posts.post_password = '') ";
}
return $search;
}
add_filter( 'posts_search', '__search_by_title_only', 500, 2 );

选择分类搜索文章:

将默认的searchform.php修改为以下代码:

/” >
  • /img/search.gif”/>

显示出的效果为下图样式,可选择全站搜索,或者具体的分类搜索,搜索的结果更加精准!

多重选项框搜索:

这种方法更加强大,可以选择多个分类,并搜索分类中的文章,精确度更好,不过使用这种方法有一定的固定性,你需要自己写好选项框中的分类id:

将你的默认的searchform.php修改为以下代码:

/”>

# 更多技巧,请关注「专题」

         
网站地图