Title: WP_REST_Font_Collections_Controller::get_items
Published: April 3, 2024
Last modified: February 24, 2026

---

# WP_REST_Font_Collections_Controller::get_items( WP_REST_Request $request ): 󠀁[WP_REST_Response](https://developer.wordpress.org/reference/classes/wp_rest_response/)󠁿|󠀁[WP_Error](https://developer.wordpress.org/reference/classes/wp_error/)󠁿

## In this article

 * [Parameters](https://developer.wordpress.org/reference/classes/wp_rest_font_collections_controller/get_items/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/classes/wp_rest_font_collections_controller/get_items/?output_format=md#return)
 * [Source](https://developer.wordpress.org/reference/classes/wp_rest_font_collections_controller/get_items/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/wp_rest_font_collections_controller/get_items/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_rest_font_collections_controller/get_items/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/wp_rest_font_collections_controller/get_items/?output_format=md#wp--skip-link--target)

Gets the font collections available.

## 󠀁[Parameters](https://developer.wordpress.org/reference/classes/wp_rest_font_collections_controller/get_items/?output_format=md#parameters)󠁿

 `$request`[WP_REST_Request](https://developer.wordpress.org/reference/classes/wp_rest_request/)
required

Full details about the request.

## 󠀁[Return](https://developer.wordpress.org/reference/classes/wp_rest_font_collections_controller/get_items/?output_format=md#return)󠁿

 [WP_REST_Response](https://developer.wordpress.org/reference/classes/wp_rest_response/)
|[WP_Error](https://developer.wordpress.org/reference/classes/wp_error/) Response
object on success, or [WP_Error](https://developer.wordpress.org/reference/classes/wp_error/)
object on failure.

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wp_rest_font_collections_controller/get_items/?output_format=md#source)󠁿

    ```php
    public function get_items( $request ) {
    	$collections_all = WP_Font_Library::get_instance()->get_font_collections();

    	$page        = $request['page'];
    	$per_page    = $request['per_page'];
    	$total_items = count( $collections_all );
    	$max_pages   = (int) ceil( $total_items / $per_page );

    	if ( $page > $max_pages && $total_items > 0 ) {
    		return new WP_Error(
    			'rest_post_invalid_page_number',
    			__( 'The page number requested is larger than the number of pages available.' ),
    			array( 'status' => 400 )
    		);
    	}

    	$collections_page = array_slice( $collections_all, ( $page - 1 ) * $per_page, $per_page );

    	$is_head_request = $request->is_method( 'HEAD' );

    	$items = array();
    	foreach ( $collections_page as $collection ) {
    		$item = $this->prepare_item_for_response( $collection, $request );

    		// If there's an error loading a collection, skip it and continue loading valid collections.
    		if ( is_wp_error( $item ) ) {
    			continue;
    		}

    		/*
    		 * Skip preparing the response body for HEAD requests.
    		 * Cannot exit earlier due to backward compatibility reasons,
    		 * as validation occurs in the prepare_item_for_response method.
    		 */
    		if ( $is_head_request ) {
    			continue;
    		}

    		$item    = $this->prepare_response_for_collection( $item );
    		$items[] = $item;
    	}

    	$response = $is_head_request ? new WP_REST_Response( array() ) : rest_ensure_response( $items );

    	$response->header( 'X-WP-Total', (int) $total_items );
    	$response->header( 'X-WP-TotalPages', $max_pages );

    	$request_params = $request->get_query_params();
    	$collection_url = rest_url( $this->namespace . '/' . $this->rest_base );
    	$base           = add_query_arg( urlencode_deep( $request_params ), $collection_url );

    	if ( $page > 1 ) {
    		$prev_page = $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 > $page ) {
    		$next_page = $page + 1;
    		$next_link = add_query_arg( 'page', $next_page, $base );

    		$response->link_header( 'next', $next_link );
    	}

    	return $response;
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/6.9.4/src/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php#L75)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php#L75-L144)

## 󠀁[Related](https://developer.wordpress.org/reference/classes/wp_rest_font_collections_controller/get_items/?output_format=md#related)󠁿

| Uses | Description | 
| [WP_Font_Library::get_instance()](https://developer.wordpress.org/reference/classes/wp_font_library/get_instance/)`wp-includes/fonts/class-wp-font-library.php` |

Utility method to retrieve the main instance of the class.

  | 
| [WP_REST_Font_Collections_Controller::prepare_item_for_response()](https://developer.wordpress.org/reference/classes/wp_rest_font_collections_controller/prepare_item_for_response/)`wp-includes/rest-api/endpoints/class-wp-rest-font-collections-controller.php` |

Prepare a single collection output for response.

  | 
| [urlencode_deep()](https://developer.wordpress.org/reference/functions/urlencode_deep/)`wp-includes/formatting.php` |

Navigates through an array, object, or scalar, and encodes the values to be used in a URL.

  | 
| [rest_ensure_response()](https://developer.wordpress.org/reference/functions/rest_ensure_response/)`wp-includes/rest-api.php` |

Ensures a REST response is a response object (for consistency).

  | 
| [rest_url()](https://developer.wordpress.org/reference/functions/rest_url/)`wp-includes/rest-api.php` |

Retrieves the URL to a REST endpoint.

  | 
| [__()](https://developer.wordpress.org/reference/functions/__/)`wp-includes/l10n.php` |

Retrieves the translation of $text.

  | 
| [add_query_arg()](https://developer.wordpress.org/reference/functions/add_query_arg/)`wp-includes/functions.php` |

Retrieves a modified URL query string.

  | 
| [is_wp_error()](https://developer.wordpress.org/reference/functions/is_wp_error/)`wp-includes/load.php` |

Checks whether the given variable is a WordPress Error.

  | 
| [WP_Error::__construct()](https://developer.wordpress.org/reference/classes/wp_error/__construct/)`wp-includes/class-wp-error.php` |

Initializes the error.

  |

[Show 6 more](https://developer.wordpress.org/reference/classes/wp_rest_font_collections_controller/get_items/?output_format=md#)
[Show less](https://developer.wordpress.org/reference/classes/wp_rest_font_collections_controller/get_items/?output_format=md#)

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_rest_font_collections_controller/get_items/?output_format=md#changelog)󠁿

| Version | Description | 
| [6.5.0](https://developer.wordpress.org/reference/since/6.5.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_rest_font_collections_controller%2Fget_items%2F)
before being able to contribute a note or feedback.