Make WordPress Core

Ticket #45194: 45194.patch

File 45194.patch, 2.8 KB (added by imath, 6 years ago)
  • src/wp-admin/edit-form-blocks.php

    diff --git src/wp-admin/edit-form-blocks.php src/wp-admin/edit-form-blocks.php
    index d998a11dad..8f281c4102 100644
    $preload_paths = array( 
    4949        sprintf( '/wp/v2/%s/%s?context=edit', $rest_base, $post->ID ),
    5050        sprintf( '/wp/v2/types/%s?context=edit', $post_type ),
    5151        sprintf( '/wp/v2/users/me?post_type=%s&context=edit', $post_type ),
     52        array( '/wp/v2/media', 'OPTIONS' ),
    5253);
    5354
    5455/*
  • src/wp-includes/rest-api.php

    diff --git src/wp-includes/rest-api.php src/wp-includes/rest-api.php
    index e1d8919c8d..3a81ec7128 100644
    function rest_preload_api_request( $memo, $path ) { 
    13431343                return $memo;
    13441344        }
    13451345
     1346        $method = 'GET';
     1347        if ( is_array( $path ) ) {
     1348                $method = end( $path );
     1349                $path   = reset( $path );
     1350
     1351                if ( ! in_array( $method, array( 'GET', 'OPTIONS' ), true ) ) {
     1352                        $method = 'GET';
     1353                }
     1354        }
     1355
    13461356        $path_parts = parse_url( $path );
    13471357        if ( false === $path_parts ) {
    13481358                return $memo;
    13491359        }
    13501360
    1351         $request = new WP_REST_Request( 'GET', $path_parts['path'] );
     1361        $request = new WP_REST_Request( $method, $path_parts['path'] );
    13521362        if ( ! empty( $path_parts['query'] ) ) {
    13531363                parse_str( $path_parts['query'], $query_params );
    13541364                $request->set_query_params( $query_params );
    function rest_preload_api_request( $memo, $path ) { 
    13671377                        $data['_links'] = $links;
    13681378                }
    13691379
    1370                 $memo[ $path ] = array(
    1371                         'body'    => $data,
    1372                         'headers' => $response->headers,
    1373                 );
     1380                if ( 'OPTIONS' === $method ) {
     1381                        $response = rest_send_allow_header( $response, $server, $request );
     1382
     1383                        $memo[ $method ][ $path ] = array(
     1384                                'body'    => $data,
     1385                                'headers' => $response->headers,
     1386                        );
     1387                } else {
     1388                        $memo[ $path ] = array(
     1389                                'body'    => $data,
     1390                                'headers' => $response->headers,
     1391                        );
     1392                }
    13741393        }
    13751394
    13761395        return $memo;
  • tests/phpunit/tests/rest-api.php

    diff --git tests/phpunit/tests/rest-api.php tests/phpunit/tests/rest-api.php
    index d30eb421c5..c82d94fff7 100644
    class Tests_REST_API extends WP_UnitTestCase { 
    629629        function test_rest_preload_api_request_no_notices_php_52() {
    630630                $this->assertTrue( is_array( rest_preload_api_request( 0, '/' ) ) );
    631631        }
     632
     633        function test_rest_preload_api_request_with_method() {
     634                $rest_server = $GLOBALS['wp_rest_server'];
     635                $GLOBALS['wp_rest_server'] = null;
     636
     637                $preload_paths = array(
     638                        '/wp/v2/types',
     639                        array( '/wp/v2/media', 'OPTIONS' ),
     640                );
     641
     642                $preload_data = array_reduce(
     643                        $preload_paths,
     644                        'rest_preload_api_request',
     645                        array()
     646                );
     647
     648                $this->assertSame( array_keys( $preload_data ), array( '/wp/v2/types', 'OPTIONS' ) );
     649                $this->assertTrue( isset( $preload_data['OPTIONS']['/wp/v2/media'] ) );
     650
     651                $GLOBALS['wp_rest_server'] = $rest_server;
     652        }
    632653}