WP_REST_Comments_Controller::get_items( WP_REST_Request $request ): WP_REST_Response|WP_Error

In this article

Retrieves a list of comment items.

Parameters

$requestWP_REST_Requestrequired
Full details about the request.

Return

WP_REST_Response|WP_Error Response object on success, or error object on failure.

Source

public function get_items( $request ) {	// Retrieve the list of registered collection query parameters.	$registered = $this->get_collection_params();	/* * This array defines mappings between public API query parameters whose * values are accepted as-passed, and their internal WP_Query parameter * name equivalents (some are the same). Only values which are also * present in $registered will be set. */	$parameter_mappings = array(	'author' => 'author__in',	'author_email' => 'author_email',	'author_exclude' => 'author__not_in',	'exclude' => 'comment__not_in',	'include' => 'comment__in',	'offset' => 'offset',	'order' => 'order',	'parent' => 'parent__in',	'parent_exclude' => 'parent__not_in',	'per_page' => 'number',	'post' => 'post__in',	'search' => 'search',	'status' => 'status',	'type' => 'type',	);	$prepared_args = array();	/* * For each known parameter which is both registered and present in the request, * set the parameter's value on the query $prepared_args. */	foreach ( $parameter_mappings as $api_param => $wp_param ) {	if ( isset( $registered[ $api_param ], $request[ $api_param ] ) ) {	$prepared_args[ $wp_param ] = $request[ $api_param ];	}	}	// Ensure certain parameter values default to empty strings.	foreach ( array( 'author_email', 'search' ) as $param ) {	if ( ! isset( $prepared_args[ $param ] ) ) {	$prepared_args[ $param ] = '';	}	}	if ( isset( $registered['orderby'] ) ) {	$prepared_args['orderby'] = $this->normalize_query_param( $request['orderby'] );	}	$prepared_args['no_found_rows'] = false;	$prepared_args['update_comment_post_cache'] = true;	$prepared_args['date_query'] = array();	// Set before into date query. Date query must be specified as an array of an array.	if ( isset( $registered['before'], $request['before'] ) ) {	$prepared_args['date_query'][0]['before'] = $request['before'];	}	// Set after into date query. Date query must be specified as an array of an array.	if ( isset( $registered['after'], $request['after'] ) ) {	$prepared_args['date_query'][0]['after'] = $request['after'];	}	if ( isset( $registered['page'] ) && empty( $request['offset'] ) ) {	$prepared_args['offset'] = $prepared_args['number'] * ( absint( $request['page'] ) - 1 );	}	$is_head_request = $request->is_method( 'HEAD' );	if ( $is_head_request ) {	// Force the 'fields' argument. For HEAD requests, only post IDs are required to calculate pagination.	$prepared_args['fields'] = 'ids';	// Disable priming comment meta for HEAD requests to improve performance.	$prepared_args['update_comment_meta_cache'] = false;	}	/** * Filters WP_Comment_Query arguments when querying comments via the REST API. * * @since 4.7.0 * * @link https://developer.wordpress.org/reference/classes/wp_comment_query/ * * @param array $prepared_args Array of arguments for WP_Comment_Query. * @param WP_REST_Request $request The REST API request. */	$prepared_args = apply_filters( 'rest_comment_query', $prepared_args, $request );	$query = new WP_Comment_Query();	$query_result = $query->query( $prepared_args );	if ( ! $is_head_request ) {	$comments = array();	foreach ( $query_result as $comment ) {	if ( ! $this->check_read_permission( $comment, $request ) ) {	continue;	}	$data = $this->prepare_item_for_response( $comment, $request );	$comments[] = $this->prepare_response_for_collection( $data );	}	}	$total_comments = (int) $query->found_comments;	$max_pages = (int) $query->max_num_pages;	if ( $total_comments < 1 ) {	// Out-of-bounds, run the query again without LIMIT for total count.	unset( $prepared_args['number'], $prepared_args['offset'] );	$query = new WP_Comment_Query();	$prepared_args['count'] = true;	$prepared_args['orderby'] = 'none';	$total_comments = $query->query( $prepared_args );	$max_pages = (int) ceil( $total_comments / $request['per_page'] );	}	$response = $is_head_request ? new WP_REST_Response( array() ) : rest_ensure_response( $comments );	$response->header( 'X-WP-Total', $total_comments );	$response->header( 'X-WP-TotalPages', $max_pages );	$base = add_query_arg( urlencode_deep( $request->get_query_params() ), rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ) );	if ( $request['page'] > 1 ) {	$prev_page = $request['page'] - 1;	if ( $prev_page > $max_pages ) {	$prev_page = $max_pages;	}	$prev_link = add_query_arg( 'page', $prev_page, $base );	$response->link_header( 'prev', $prev_link );	}	if ( $max_pages > $request['page'] ) {	$next_page = $request['page'] + 1;	$next_link = add_query_arg( 'page', $next_page, $base );	$response->link_header( 'next', $next_link );	}	return $response; } 

Hooks

apply_filters( ‘rest_comment_query’, array $prepared_args, WP_REST_Request $request )

Filters WP_Comment_Query arguments when querying comments via the REST API.

Changelog

VersionDescription
4.7.0Introduced.

User Contributed Notes

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