posts_groupby problem

时间:2012-12-03 作者:Steven Jones

在我的搜索页面上,我想按帖子类型对帖子进行分组。为此,我有以下几点:

add_filter(\'posts_groupby\', \'group_by_post_type\' );
function group_by_post_type( $groupby ) {
  global $wpdb;
  if( is_search() ) {
     return $wpdb->posts.\'.post_type\';
  }

}
在添加过滤器之前,我有9个结果,但是在添加过滤器之后,我只有3个结果,每个帖子类型一个。

我做错了什么?

1 个回复
SO网友:Ahmad M

您的筛选器将生成SQL查询GROUP BY 声明,但没有aggregate function. 这将导致仅显示组中出现的与查询匹配的第一行,并忽略后续行。阅读this question 了解更多详细信息。

如果要按顺序排列结果post_type, 您可以连接到posts_orderby 改为筛选:

add_filter(\'posts_orderby\', \'group_by_post_type\', 10, 2);
function group_by_post_type($orderby, $query) {
    global $wpdb;
    if ($query->is_search) {
        return $wpdb->posts . \'.post_type DESC\';
    }
    // provide a default fallback return if the above condition is not true
    return $orderby;
}

结束

相关推荐

Add_Filters()和Apply_Filter()有什么作用?

我有点困惑,为什么这不起作用-尽管必须说,我不太确定是什么apply_filters() 和add_filter 正在做,所以任何一般性的提示都会很好!我想要一个查询,在一个帖子页面上显示之前的五篇帖子。我正在发送当前帖子的日期,并希望应用一个过滤器,过滤出早于此的帖子。function sw_filter_posts_before( $where = \'\', $date) { $where .= \" AND post_date < \'\" . $date . \"