mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2025-10-16 12:05:38 +00:00
REST API: Respect _fields query arg in preloaded requests
Ensures that preloaded request can include a `_fields` query param that asks that only selected response fields are returned. Props jsnajdr, timothyblynjacobs. Fixes #55213. See #55567. git-svn-id: https://develop.svn.wordpress.org/trunk@53217 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
abaee6aefb
commit
5ae266fdc4
@ -2868,12 +2868,12 @@ function rest_preload_api_request( $memo, $path ) {
|
||||
$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 ) {
|
||||
$response = rest_send_allow_header( $response, $server, $request );
|
||||
|
||||
$memo[ $method ][ $path ] = array(
|
||||
'body' => $data,
|
||||
'headers' => $response->headers,
|
||||
|
||||
@ -2490,4 +2490,32 @@ class Tests_REST_API extends WP_UnitTestCase {
|
||||
array( '', array(), array() ),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 55213
|
||||
*/
|
||||
public function test_rest_preload_api_request_fields() {
|
||||
$preload_paths = array(
|
||||
'/',
|
||||
'/?_fields=description',
|
||||
);
|
||||
|
||||
$preload_data = array_reduce(
|
||||
$preload_paths,
|
||||
'rest_preload_api_request',
|
||||
array()
|
||||
);
|
||||
|
||||
$this->assertSame( array_keys( $preload_data ), array( '/', '/?_fields=description' ) );
|
||||
|
||||
// Unfiltered request has all fields
|
||||
$this->assertArrayHasKey( 'description', $preload_data['/']['body'] );
|
||||
$this->assertArrayHasKey( 'routes', $preload_data['/']['body'] );
|
||||
|
||||
// Filtered request only has the desired fields + links
|
||||
$this->assertSame(
|
||||
array_keys( $preload_data['/?_fields=description']['body'] ),
|
||||
array( 'description', '_links' )
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user