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 6.9.1

public function get_items( $request ) {
	$abilities = array_filter(
		wp_get_abilities(),
		static function ( $ability ) {
			return $ability->get_meta_item( 'show_in_rest' );
		}
	);

	// Filter by ability category if specified.
	$category = $request['category'];
	if ( ! empty( $category ) ) {
		$abilities = array_filter(
			$abilities,
			static function ( $ability ) use ( $category ) {
				return $ability->get_category() === $category;
			}
		);
		// Reset array keys after filtering.
		$abilities = array_values( $abilities );
	}

	$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;
}