On my search page I want to group the posts by post type. To do this I’ve got the following:
add_filter('posts_groupby', 'group_by_post_type' );
function group_by_post_type( $groupby ) {
global $wpdb;
if( is_search() ) {
return $wpdb->posts.'.post_type';
}
}
Before adding the filter I had 9 results, however after adding the filter I only have 3 results, one of each post type.
What am I doing wrong?
Your filter will result in SQL query with
GROUP BY
statement but without aggregate function. This will result in displaying only the first row that appear in the group that match your query and omitting the subsequent rows. Read this question for more details.If you want to order your results by
post_type
, you can hook toposts_orderby
filter instead: