Make WordPress Core

Ticket #35329: 35329.diff

File 35329.diff, 2.9 KB (added by swissspidy, 9 years ago)
  • src/wp-includes/rest-api.php

    diff --git src/wp-includes/rest-api.php src/wp-includes/rest-api.php
    index 0b2da7f..d1bcb85 100644
    function rest_url( $path = '', $scheme = 'json' ) { 
    273273 * @return WP_REST_Response REST response.
    274274 */
    275275function rest_do_request( $request ) {
    276         global $wp_rest_server;
    277276        $request = rest_ensure_request( $request );
    278         return $wp_rest_server->dispatch( $request );
     277        return rest_get_server()->dispatch( $request );
     278}
     279
     280/**
     281 * Make an internal REST request
     282 *
     283 * @since 4.5.0
     284 *
     285 * @global WP_REST_Server $wp_rest_server ResponseHandler instance (usually WP_REST_Server).
     286 *
     287 * @param WP_REST_Request|string $request_or_method WP_REST_Request object or a request method.
     288 * @param string                 $path              Optional. Path to retrieve data from if not already specified in `$request_or_method`.
     289 *                                                  Default null.
     290 * @param array                  $data              Optional. Data passed to the request. Default empty array.
     291 * @return WP_Error|array Response data on success, WP_Error object on failure.
     292 */
     293function rest_internal_request( $request_or_method, $path = null, $data = array() ) {
     294        if ( $request_or_method instanceof WP_REST_Request ) {
     295                $request = $request_or_method;
     296        } else {
     297                $request = new WP_REST_Request( $request_or_method, $path );
     298
     299                foreach ( $data as $k => $v ) {
     300                        $request->set_param( $k, $v );
     301                }
     302        }
     303
     304        $result = rest_get_server()->dispatch( $request );
     305
     306        if ( $result->is_error() ) {
     307                return $result->as_error();
     308        }
     309
     310        return rest_get_server()->response_to_data( $result, ! empty( $data['_embed'] ) );
     311}
     312
     313/**
     314 * Get the current REST server instance.
     315 *
     316 * Instantiates a new instance if none exists already.
     317 *
     318 * @since 4.5.0
     319 *
     320 * @global WP_REST_Server $wp_rest_server REST server instance.
     321 *
     322 * @return  WP_REST_Server REST server instance.
     323 */
     324function rest_get_server() {
     325        /* @var WP_REST_Server $wp_rest_server */
     326        global $wp_rest_server;
     327
     328        if ( empty( $wp_rest_server ) ) {
     329                /**
     330                 * Filter the REST Server Class.
     331                 *
     332                 * This filter allows you to adjust the server class used by the API, using a
     333                 * different class to handle requests.
     334                 *
     335                 * @since 4.5.0
     336                 *
     337                 * @param string $class_name The name of the server class. Default 'WP_REST_Server'.
     338                 */
     339                $wp_rest_server_class = apply_filters( 'wp_rest_server_class', 'WP_REST_Server' );
     340
     341                $wp_rest_server = new $wp_rest_server_class;
     342
     343                /**
     344                 * Fires when preparing to serve an API request.
     345                 *
     346                 * Endpoint objects should be created and register their hooks on this action rather
     347                 * than another action to ensure they're only loaded when needed.
     348                 *
     349                 * @since 4.5.0
     350                 *
     351                 * @param WP_REST_Server $wp_rest_server Server object.
     352                 */
     353                do_action( 'rest_api_init', $wp_rest_server );
     354        }
     355
     356        return $wp_rest_server;
    279357}
    280358
    281359/**