将内部请求的结果附加到REST API,以便预加载要附加到页面的数据。

原型

rest_preload_api_request( array $memo, string $path )

描述

期望在array_reduce的上下文中调用。

参数

$memo (array) (Required) 减少累加器。

$path (string) (Required) 要预加载的REST API路径。

返回值

(array)  修改减少累加器。

源文件

路径:wp-includes/rest-api.php

<?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_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();
		$data   = (array) $response->get_data();
		$links  = $server->get_compact_response_links( $response );
		if ( ! empty( $links ) ) {
			$data['_links'] = $links;
		}
		if ( 'OPTIONS' === $method ) {
			$response = rest_send_allow_header( $response, $server, $request );
			$memo[ $method ][ $path ] = array(
				'body'    => $data,
				'headers' => $response->headers,
			);
		} else {
			$memo[ $path ] = array(
				'body'    => $data,
				'headers' => $response->headers,
			);
		}
	}
	return $memo;
}
...
?>

其他

英文文档:https://developer.wordpress.org/reference/functions/rest_preload_api_request/