WP_Comment_Query::get_comments(): int|int[]|WP_Comment[]

In this article

Get a list of comments matching the query vars.

Return

int|int[]|WP_Comment[] List of comments or number of found comments if $count argument is true.

Source

public function get_comments() {	global $wpdb;	$this->parse_query();	// Parse meta query.	$this->meta_query = new WP_Meta_Query();	$this->meta_query->parse_query_vars( $this->query_vars );	/** * Fires before comments are retrieved. * * @since 3.1.0 * * @param WP_Comment_Query $query Current instance of WP_Comment_Query (passed by reference). */	do_action_ref_array( 'pre_get_comments', array( &$this ) );	// Reparse query vars, in case they were modified in a 'pre_get_comments' callback.	$this->meta_query->parse_query_vars( $this->query_vars );	if ( ! empty( $this->meta_query->queries ) ) {	$this->meta_query_clauses = $this->meta_query->get_sql( 'comment', $wpdb->comments, 'comment_ID', $this );	}	$comment_data = null;	/** * Filters the comments data before the query takes place. * * Return a non-null value to bypass WordPress' default comment queries. * * The expected return type from this filter depends on the value passed * in the request query vars: * - When `$this->query_vars['count']` is set, the filter should return * the comment count as an integer. * - When `'ids' === $this->query_vars['fields']`, the filter should return * an array of comment IDs. * - Otherwise the filter should return an array of WP_Comment objects. * * Note that if the filter returns an array of comment data, it will be assigned * to the `comments` property of the current WP_Comment_Query instance. * * Filtering functions that require pagination information are encouraged to set * the `found_comments` and `max_num_pages` properties of the WP_Comment_Query object, * passed to the filter by reference. If WP_Comment_Query does not perform a database * query, it will not have enough information to generate these values itself. * * @since 5.3.0 * @since 5.6.0 The returned array of comment data is assigned to the `comments` property * of the current WP_Comment_Query instance. * * @param array|int|null $comment_data Return an array of comment data to short-circuit WP's comment query, * the comment count as an integer if `$this->query_vars['count']` is set, * or null to allow WP to run its normal queries. * @param WP_Comment_Query $query The WP_Comment_Query instance, passed by reference. */	$comment_data = apply_filters_ref_array( 'comments_pre_query', array( $comment_data, &$this ) );	if ( null !== $comment_data ) {	if ( is_array( $comment_data ) && ! $this->query_vars['count'] ) {	$this->comments = $comment_data;	}	return $comment_data;	}	/* * Only use the args defined in the query_var_defaults to compute the key, * but ignore 'fields', 'update_comment_meta_cache', 'update_comment_post_cache' which does not affect query results. */	$_args = wp_array_slice_assoc( $this->query_vars, array_keys( $this->query_var_defaults ) );	unset( $_args['fields'], $_args['update_comment_meta_cache'], $_args['update_comment_post_cache'] );	$key = md5( serialize( $_args ) );	$last_changed = wp_cache_get_last_changed( 'comment' );	$cache_key = "get_comments:$key:$last_changed";	$cache_value = wp_cache_get( $cache_key, 'comment-queries' );	if ( false === $cache_value ) {	$comment_ids = $this->get_comment_ids();	if ( $comment_ids ) {	$this->set_found_comments();	}	$cache_value = array(	'comment_ids' => $comment_ids,	'found_comments' => $this->found_comments,	);	wp_cache_add( $cache_key, $cache_value, 'comment-queries' );	} else {	$comment_ids = $cache_value['comment_ids'];	$this->found_comments = $cache_value['found_comments'];	}	if ( $this->found_comments && $this->query_vars['number'] ) {	$this->max_num_pages = (int) ceil( $this->found_comments / $this->query_vars['number'] );	}	// If querying for a count only, there's nothing more to do.	if ( $this->query_vars['count'] ) {	// $comment_ids is actually a count in this case.	return (int) $comment_ids;	}	$comment_ids = array_map( 'intval', $comment_ids );	if ( $this->query_vars['update_comment_meta_cache'] ) {	wp_lazyload_comment_meta( $comment_ids );	}	if ( 'ids' === $this->query_vars['fields'] ) {	$this->comments = $comment_ids;	return $this->comments;	}	_prime_comment_caches( $comment_ids, false );	// Fetch full comment objects from the primed cache.	$_comments = array();	foreach ( $comment_ids as $comment_id ) {	$_comment = get_comment( $comment_id );	if ( $_comment ) {	$_comments[] = $_comment;	}	}	// Prime comment post caches.	if ( $this->query_vars['update_comment_post_cache'] ) {	$comment_post_ids = array();	foreach ( $_comments as $_comment ) {	$comment_post_ids[] = $_comment->comment_post_ID;	}	_prime_post_caches( $comment_post_ids, false, false );	}	/** * Filters the comment query results. * * @since 3.1.0 * * @param WP_Comment[] $_comments An array of comments. * @param WP_Comment_Query $query Current instance of WP_Comment_Query (passed by reference). */	$_comments = apply_filters_ref_array( 'the_comments', array( $_comments, &$this ) );	// Convert to WP_Comment instances.	$comments = array_map( 'get_comment', $_comments );	if ( $this->query_vars['hierarchical'] ) {	$comments = $this->fill_descendants( $comments );	}	$this->comments = $comments;	return $this->comments; } 

Hooks

apply_filters_ref_array( ‘comments_pre_query’, array|int|null $comment_data, WP_Comment_Query $query )

Filters the comments data before the query takes place.

do_action_ref_array( ‘pre_get_comments’, WP_Comment_Query $query )

Fires before comments are retrieved.

apply_filters_ref_array( ‘the_comments’, WP_Comment[] $_comments, WP_Comment_Query $query )

Filters the comment query results.

Changelog

VersionDescription
4.2.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.