WP_REST_Abilities_V1_List_Controller::get_itemspublicWP 6.9.0

Retrieves all abilities.

Method of the class: WP_REST_Abilities_V1_List_Controller{}

No Hooks.

Returns

WP_REST_Response. Response object on success.

Usage

$WP_REST_Abilities_V1_List_Controller = new WP_REST_Abilities_V1_List_Controller();
$WP_REST_Abilities_V1_List_Controller->get_items( $request );
$request(WP_REST_Request) (required)
Full details about the request.

Changelog

Since 6.9.0 Introduced.

WP_REST_Abilities_V1_List_Controller::get_items() code WP 7.1

public function get_items( $request ) {
	$query_args = array(
		'meta' => array( 'show_in_rest' => true ),
	);

	if ( ! empty( $request['category'] ) ) {
		$query_args['category'] = $request['category'];
	}

	if ( ! empty( $request['namespace'] ) ) {
		$query_args['namespace'] = $request['namespace'];
	}

	if ( ! empty( $request['meta'] ) ) {
		// Merge caller meta first so the forced show_in_rest filter wins. This keeps a caller from using meta to reveal abilities hidden from REST.
		$query_args['meta'] = array_merge( $request['meta'], $query_args['meta'] );
	}

	$abilities = wp_get_abilities( $query_args );

	$page     = $request['page'];
	$per_page = $request['per_page'];
	$offset   = ( $page - 1 ) * $per_page;

	$total_abilities = count( $abilities );
	$max_pages       = (int) ceil( $total_abilities / $per_page );

	if ( $request->get_method() === 'HEAD' ) {
		$response = new WP_REST_Response( array() );
	} else {
		$abilities = array_slice( $abilities, $offset, $per_page );

		$data = array();
		foreach ( $abilities as $ability ) {
			$item   = $this->prepare_item_for_response( $ability, $request );
			$data[] = $this->prepare_response_for_collection( $item );
		}

		$response = rest_ensure_response( $data );
	}

	$response->header( 'X-WP-Total', (string) $total_abilities );
	$response->header( 'X-WP-TotalPages', (string) $max_pages );

	$query_params = $request->get_query_params();
	$base         = add_query_arg( urlencode_deep( $query_params ), rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ) );

	if ( $page > 1 ) {
		$prev_page = $page - 1;
		$prev_link = add_query_arg( 'page', $prev_page, $base );
		$response->link_header( 'prev', $prev_link );
	}

	if ( $page < $max_pages ) {
		$next_page = $page + 1;
		$next_link = add_query_arg( 'page', $next_page, $base );
		$response->link_header( 'next', $next_link );
	}

	return $response;
}