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.
Table of contents
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;
}