REST API: Always call rest_get_server()
instead of accessing the $wp_rest_server
global.
This is a consistency improvement and also a bug fix for fairly obscure cases involving modified WP load order. Fixes #41555. git-svn-id: https://develop.svn.wordpress.org/trunk@41238 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
d339af1bc1
commit
d570de32ca
@ -19,8 +19,6 @@ define( 'REST_API_VERSION', '2.0' );
|
|||||||
*
|
*
|
||||||
* @since 4.4.0
|
* @since 4.4.0
|
||||||
*
|
*
|
||||||
* @global WP_REST_Server $wp_rest_server ResponseHandler instance (usually WP_REST_Server).
|
|
||||||
*
|
|
||||||
* @param string $namespace The first URL segment after core prefix. Should be unique to your package/plugin.
|
* @param string $namespace The first URL segment after core prefix. Should be unique to your package/plugin.
|
||||||
* @param string $route The base URL for route you are adding.
|
* @param string $route The base URL for route you are adding.
|
||||||
* @param array $args Optional. Either an array of options for the endpoint, or an array of arrays for
|
* @param array $args Optional. Either an array of options for the endpoint, or an array of arrays for
|
||||||
@ -30,9 +28,6 @@ define( 'REST_API_VERSION', '2.0' );
|
|||||||
* @return bool True on success, false on error.
|
* @return bool True on success, false on error.
|
||||||
*/
|
*/
|
||||||
function register_rest_route( $namespace, $route, $args = array(), $override = false ) {
|
function register_rest_route( $namespace, $route, $args = array(), $override = false ) {
|
||||||
/** @var WP_REST_Server $wp_rest_server */
|
|
||||||
global $wp_rest_server;
|
|
||||||
|
|
||||||
if ( empty( $namespace ) ) {
|
if ( empty( $namespace ) ) {
|
||||||
/*
|
/*
|
||||||
* Non-namespaced routes are not allowed, with the exception of the main
|
* Non-namespaced routes are not allowed, with the exception of the main
|
||||||
@ -74,7 +69,7 @@ function register_rest_route( $namespace, $route, $args = array(), $override = f
|
|||||||
}
|
}
|
||||||
|
|
||||||
$full_route = '/' . trim( $namespace, '/' ) . '/' . trim( $route, '/' );
|
$full_route = '/' . trim( $namespace, '/' ) . '/' . trim( $route, '/' );
|
||||||
$wp_rest_server->register_route( $namespace, $full_route, $args, $override );
|
rest_get_server()->register_route( $namespace, $full_route, $args, $override );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,7 +240,6 @@ function create_initial_rest_routes() {
|
|||||||
* @since 4.4.0
|
* @since 4.4.0
|
||||||
*
|
*
|
||||||
* @global WP $wp Current WordPress environment instance.
|
* @global WP $wp Current WordPress environment instance.
|
||||||
* @global WP_REST_Server $wp_rest_server ResponseHandler instance (usually WP_REST_Server).
|
|
||||||
*/
|
*/
|
||||||
function rest_api_loaded() {
|
function rest_api_loaded() {
|
||||||
if ( empty( $GLOBALS['wp']->query_vars['rest_route'] ) ) {
|
if ( empty( $GLOBALS['wp']->query_vars['rest_route'] ) ) {
|
||||||
@ -387,8 +381,6 @@ function rest_url( $path = '', $scheme = 'json' ) {
|
|||||||
*
|
*
|
||||||
* @since 4.4.0
|
* @since 4.4.0
|
||||||
*
|
*
|
||||||
* @global WP_REST_Server $wp_rest_server ResponseHandler instance (usually WP_REST_Server).
|
|
||||||
*
|
|
||||||
* @param WP_REST_Request|string $request Request.
|
* @param WP_REST_Request|string $request Request.
|
||||||
* @return WP_REST_Response REST response.
|
* @return WP_REST_Response REST response.
|
||||||
*/
|
*/
|
||||||
@ -704,7 +696,6 @@ function rest_output_link_header() {
|
|||||||
* @since 4.4.0
|
* @since 4.4.0
|
||||||
*
|
*
|
||||||
* @global mixed $wp_rest_auth_cookie
|
* @global mixed $wp_rest_auth_cookie
|
||||||
* @global WP_REST_Server $wp_rest_server REST server instance.
|
|
||||||
*
|
*
|
||||||
* @param WP_Error|mixed $result Error from another authentication handler,
|
* @param WP_Error|mixed $result Error from another authentication handler,
|
||||||
* null if we should handle it, or another value
|
* null if we should handle it, or another value
|
||||||
@ -716,7 +707,7 @@ function rest_cookie_check_errors( $result ) {
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
global $wp_rest_auth_cookie, $wp_rest_server;
|
global $wp_rest_auth_cookie;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Is cookie authentication being used? (If we get an auth
|
* Is cookie authentication being used? (If we get an auth
|
||||||
@ -750,7 +741,7 @@ function rest_cookie_check_errors( $result ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Send a refreshed nonce in header.
|
// Send a refreshed nonce in header.
|
||||||
$wp_rest_server->send_header( 'X-WP-Nonce', wp_create_nonce( 'wp_rest' ) );
|
rest_get_server()->send_header( 'X-WP-Nonce', wp_create_nonce( 'wp_rest' ) );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,12 @@ class Tests_REST_API extends WP_UnitTestCase {
|
|||||||
public function setUp() {
|
public function setUp() {
|
||||||
// Override the normal server with our spying server.
|
// Override the normal server with our spying server.
|
||||||
$GLOBALS['wp_rest_server'] = new Spy_REST_Server();
|
$GLOBALS['wp_rest_server'] = new Spy_REST_Server();
|
||||||
parent::setup();
|
parent::setUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function tearDown() {
|
||||||
|
remove_filter( 'wp_rest_server_class', array( $this, 'filter_wp_rest_server_class' ) );
|
||||||
|
parent::tearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -446,4 +451,21 @@ class Tests_REST_API extends WP_UnitTestCase {
|
|||||||
public function test_rest_parse_date_force_utc( $string, $value ) {
|
public function test_rest_parse_date_force_utc( $string, $value ) {
|
||||||
$this->assertEquals( $value, rest_parse_date( $string, true ) );
|
$this->assertEquals( $value, rest_parse_date( $string, true ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function filter_wp_rest_server_class( $class_name ) {
|
||||||
|
return 'Spy_REST_Server';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_register_rest_route_without_server() {
|
||||||
|
$GLOBALS['wp_rest_server'] = null;
|
||||||
|
add_filter( 'wp_rest_server_class', array( $this, 'filter_wp_rest_server_class' ) );
|
||||||
|
|
||||||
|
register_rest_route( 'test-ns', '/test', array(
|
||||||
|
'methods' => array( 'GET' ),
|
||||||
|
'callback' => '__return_null',
|
||||||
|
) );
|
||||||
|
|
||||||
|
$routes = $GLOBALS['wp_rest_server']->get_routes();
|
||||||
|
$this->assertEquals( $routes['/test-ns/test'][0]['methods'], array( 'GET' => true ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user