The comments_clauses WordPress PHP filter allows you to modify the SQL clauses used in comment queries.
Usage
add_filter('comments_clauses', 'my_custom_comments_clauses', 10, 2);
function my_custom_comments_clauses($clauses, $query) {
// Your custom code here
return $clauses;
}
Parameters
$clauses(string[]): An associative array of comment query clauses.$query(WP_Comment_Query): Current instance of WP_Comment_Query (passed by reference).
More information
See WordPress Developer Resources: comments_clauses
Examples
Exclude comments by a specific user
Exclude comments made by a user with the user ID of 5.
add_filter('comments_clauses', 'exclude_user_comments', 10, 2);
function exclude_user_comments($clauses, $query) {
global $wpdb;
$clauses['where'] .= " AND {$wpdb->comments}.user_id != 5";
return $clauses;
}
Order comments by title
Order comments by the title of the post they belong to.
add_filter('comments_clauses', 'order_comments_by_title', 10, 2);
function order_comments_by_title($clauses, $query) {
global $wpdb;
$clauses['orderby'] = "{$wpdb->posts}.post_title";
return $clauses;
}
Filter comments by a custom field
Only show comments on posts with a specific custom field value.
add_filter('comments_clauses', 'filter_comments_by_custom_field', 10, 2);
function filter_comments_by_custom_field($clauses, $query) {
global $wpdb;
$clauses['join'] .= " INNER JOIN {$wpdb->postmeta} ON ({$wpdb->posts}.ID = {$wpdb->postmeta}.post_id)";
$clauses['where'] .= " AND {$wpdb->postmeta}.meta_key = 'custom_field_name' AND {$wpdb->postmeta}.meta_value = 'custom_value'";
return $clauses;
}
Limit comments per page
Limit the number of comments displayed per page to 5.
add_filter('comments_clauses', 'limit_comments_per_page', 10, 2);
function limit_comments_per_page($clauses, $query) {
$clauses['limit'] = '5';
return $clauses;
}
Exclude pingbacks and trackbacks
Exclude pingbacks and trackbacks from the comment query.
add_filter('comments_clauses', 'exclude_pingbacks_trackbacks', 10, 2);
function exclude_pingbacks_trackbacks($clauses, $query) {
global $wpdb;
$clauses['where'] .= " AND {$wpdb->comments}.comment_type NOT IN ('pingback', 'trackback')";
return $clauses;
}