将自定义帖子类型推送到搜索结果的顶部

时间:2014-10-09 作者:Tereza Vanacká

除了帖子和页面,我的网站上还有个人资料。是否存在某种方式,我如何才能将它们推到搜索结果的顶部?目前,结果首先按关键字排序,然后按日期排序。问题是,帖子(关于人;例如公告)几乎总是比个人资料更新。这是合乎逻辑的:个人资料只添加了一次,帖子不断发布。因此,个人资料可能在前10名,但也不是。如果有十篇关于被搜索姓名的人的较新帖子,那么此人的个人资料在列表中的位置将太深(常见情况)。这是错误的。如果我搜索这个人的名字,profile总是最相关的内容,所以它应该总是第一个结果。

2 个回复
最合适的回答,由SO网友:gmazzap 整理而成

由于WP 3.7有一个过滤器"posts_search_orderby" 允许设置搜索顺序。

确保过滤器按预期设置工作"orderby""relevance".

add_action( \'pre_get_posts\', function( $query ) {
  if ( $query->is_search() ) {
    $query->set( \'orderby\', \'relevance\' );
  }
} );
然后,假设您的profiles CPT slug是“profiles”:

add_filter( \'posts_search_orderby\', function( $search_orderby ) {
    global $wpdb;
    return "{$wpdb->posts}.post_type LIKE \'profiles\' DESC, {$search_orderby}";
});
按照通常的方式,将显示所有在帖子标题或帖子内容中具有搜索关键字的帖子,但排序方式如下:

包含配置文件CPT的帖子,无论搜索关键字是在标题中还是在内容中,按降序日期排序,无论帖子类型,按降序日期排序,无论帖子内容中包含搜索关键字,无论帖子类型,按降序日期排序

SO网友:Daniel Garcia Sanchez

WordPress允许您过滤搜索结果。默认情况下,它会在帖子和页面上搜索,但您可以添加自定义帖子类型:

function searchfilter($query) {

    if ($query->is_search && !is_admin() ) {
        $query->set(\'post_type\',array(\'course\',\'post\',\'page\'));
    }

return $query;
}

add_filter(\'pre_get_posts\',\'searchfilter\');
上面的代码将过滤搜索结果,为您提供以下类型的帖子:帖子、页面、课程(例如)。

希望这对你有帮助。

结束

相关推荐

Custom Field Search

我正在尝试创建一个自定义搜索表单,用于搜索我创建的自定义帖子类型。表单需要搜索两个自定义分类法(类似于标记和类别)和帖子的正文文本。将有一个搜索输入,用于搜索正文和标签,还有一个下拉列表,用于按类别(任意、类别1、类别2、类别3)进行过滤。我需要制作什么样的模板,这需要什么样的代码?非常感谢!