rest_preload_api_request() WordPress Function
The rest_preload_api_request() function was introduced in WordPress 4.6.0. It allows for a REST API request to be made before the page is rendered. This can be useful for fetching data that is needed to display the page. The function takes two arguments: the request path and an array of parameters. The path is the REST API endpoint that will be called. The parameters are an array of key/value pairs that will be passed to the endpoint. The function returns the response from the API request.
rest_preload_api_request( array $memo, string $path ) #
Append result of internal request to REST API for purpose of preloading data to be attached to a page.
Description
Expected to be called in the context of array_reduce
.
Parameters
- $memo
(array)(Required)Reduce accumulator.
- $path
(string)(Required)REST API path to preload.
Return
(array) Modified reduce accumulator.
Source
File: wp-includes/rest-api.php
function rest_preload_api_request( $memo, $path ) { // array_reduce() doesn't support passing an array in PHP 5.2, // so we need to make sure we start with one. if ( ! is_array( $memo ) ) { $memo = array(); } if ( empty( $path ) ) { return $memo; } $method = 'GET'; if ( is_array( $path ) && 2 === count( $path ) ) { $method = end( $path ); $path = reset( $path ); if ( ! in_array( $method, array( 'GET', 'OPTIONS' ), true ) ) { $method = 'GET'; } } $path = untrailingslashit( $path ); if ( empty( $path ) ) { $path = '/'; } $path_parts = parse_url( $path ); if ( false === $path_parts ) { return $memo; } $request = new WP_REST_Request( $method, $path_parts['path'] ); if ( ! empty( $path_parts['query'] ) ) { parse_str( $path_parts['query'], $query_params ); $request->set_query_params( $query_params ); } $response = rest_do_request( $request ); if ( 200 === $response->status ) { $server = rest_get_server(); /** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */ $response = apply_filters( 'rest_post_dispatch', rest_ensure_response( $response ), $server, $request ); $embed = $request->has_param( '_embed' ) ? rest_parse_embed_param( $request['_embed'] ) : false; $data = (array) $server->response_to_data( $response, $embed ); if ( 'OPTIONS' === $method ) { $memo[ $method ][ $path ] = array( 'body' => $data, 'headers' => $response->headers, ); } else { $memo[ $path ] = array( 'body' => $data, 'headers' => $response->headers, ); } } return $memo; }
Expand full source codeCollapse full source codeView on TracView on GitHub
Changelog
Version | Description |
---|---|
5.0.0 | Introduced. |