The posts_groupby filter allows you to modify the GROUP BY clause of the WordPress query, which is used to group rows that have the same values in specified columns.
Usage
add_filter('posts_groupby', 'your_custom_function', 10, 2);
function your_custom_function($groupby, $query) {
// your custom code here
return $groupby;
}
Parameters
- $groupby (string): The GROUP BY clause of the query.
- $query (WP_Query): The WP_Query instance (passed by reference).
More information
See WordPress Developer Resources: posts_groupby
Examples
Group Posts by Year
This example groups posts by the year they were published:
add_filter('posts_groupby', 'group_posts_by_year', 10, 2);
function group_posts_by_year($groupby, $query) {
global $wpdb;
$groupby = "{$wpdb->prefix}posts.post_date YEAR";
return $groupby;
}
Group Posts by Author
Group posts by the author:
add_filter('posts_groupby', 'group_posts_by_author', 10, 2);
function group_posts_by_author($groupby, $query) {
global $wpdb;
$groupby = "{$wpdb->prefix}posts.post_author";
return $groupby;
}
Group Posts by Category
Group posts by the category:
add_filter('posts_groupby', 'group_posts_by_category', 10, 2);
function group_posts_by_category($groupby, $query) {
global $wpdb;
$groupby = "{$wpdb->prefix}terms.term_id";
return $groupby;
}
Group Posts by Month and Year
Group posts by the month and year they were published:
add_filter('posts_groupby', 'group_posts_by_month_and_year', 10, 2);
function group_posts_by_month_and_year($groupby, $query) {
global $wpdb;
$groupby = "MONTH({$wpdb->prefix}posts.post_date), YEAR({$wpdb->prefix}posts.post_date)";
return $groupby;
}
Group Posts by Custom Field Value
Group posts by the value of a custom field:
add_filter('posts_groupby', 'group_posts_by_custom_field_value', 10, 2);
function group_posts_by_custom_field_value($groupby, $query) {
global $wpdb;
$groupby = "{$wpdb->prefix}postmeta.meta_value";
return $groupby;
}