diff --git src/wp-includes/rest-api/rest-functions.php src/wp-includes/rest-api/rest-functions.php
index c3f6be0..1a403b7 100644
|
|
|
|
| 20 | 20 | * multiple methods. Default empty array. |
| 21 | 21 | * @param bool $override Optional. If the route already exists, should we override it? True overrides, |
| 22 | 22 | * false merges (with newer overriding if duplicate keys exist). Default false. |
| | 23 | * @return bool True on success, false on error. |
| 23 | 24 | */ |
| 24 | 25 | function register_rest_route( $namespace, $route, $args = array(), $override = false ) { |
| 25 | 26 | /** @var WP_REST_Server $wp_rest_server */ |
| 26 | 27 | global $wp_rest_server; |
| 27 | 28 | |
| | 29 | if ( empty( $namespace ) ) { |
| | 30 | /* |
| | 31 | * Non-namespaced routes are not allowed, with the exception of the main |
| | 32 | * and namespace indexes. If you really need to register a |
| | 33 | * non-namespaced route, call `WP_REST_Server::register_route` directly. |
| | 34 | */ |
| | 35 | _doing_it_wrong( 'register_rest_route', 'Routes must be namespaced with plugin or theme name and version', 'WPAPI-2.0' ); |
| | 36 | return false; |
| | 37 | } else if ( empty( $route ) ) { |
| | 38 | _doing_it_wrong( 'register_rest_route', 'Route must be specified', 'WPAPI-2.0' ); |
| | 39 | return false; |
| | 40 | } |
| | 41 | |
| 28 | 42 | if ( isset( $args['callback'] ) ) { |
| 29 | 43 | // Upgrade a single set to multiple. |
| 30 | 44 | $args = array( $args ); |
| … |
… |
function register_rest_route( $namespace, $route, $args = array(), $override = f
|
| 44 | 58 | $arg_group = array_merge( $defaults, $arg_group ); |
| 45 | 59 | } |
| 46 | 60 | |
| 47 | | if ( $namespace ) { |
| 48 | | $full_route = '/' . trim( $namespace, '/' ) . '/' . trim( $route, '/' ); |
| 49 | | } else { |
| 50 | | /* |
| 51 | | * Non-namespaced routes are not allowed, with the exception of the main |
| 52 | | * and namespace indexes. If you really need to register a |
| 53 | | * non-namespaced route, call `WP_REST_Server::register_route` directly. |
| 54 | | */ |
| 55 | | _doing_it_wrong( 'register_rest_route', 'Routes must be namespaced with plugin name and version', 'WPAPI-2.0' ); |
| 56 | | |
| 57 | | $full_route = '/' . trim( $route, '/' ); |
| 58 | | } |
| 59 | | |
| | 61 | $full_route = '/' . trim( $namespace, '/' ) . '/' . trim( $route, '/' ); |
| 60 | 62 | $wp_rest_server->register_route( $namespace, $full_route, $args, $override ); |
| | 63 | return true; |
| 61 | 64 | } |
| 62 | 65 | |
| 63 | 66 | /** |
diff --git tests/phpunit/tests/rest-api.php tests/phpunit/tests/rest-api.php
index ff7e5cd..f417a93 100644
|
|
|
class Tests_REST_API extends WP_UnitTestCase {
|
| 149 | 149 | } |
| 150 | 150 | |
| 151 | 151 | /** |
| | 152 | * Test that we reject routes without namespaces |
| | 153 | * |
| | 154 | * @expectedIncorrectUsage register_rest_route |
| | 155 | */ |
| | 156 | public function test_route_reject_empty_namespace() { |
| | 157 | register_rest_route( '', '/test-empty-namespace', array( |
| | 158 | 'methods' => array( 'POST' ), |
| | 159 | 'callback' => '__return_null', |
| | 160 | ), true ); |
| | 161 | $endpoints = $GLOBALS['wp_rest_server']->get_routes(); |
| | 162 | $this->assertFalse( isset( $endpoints['/test-empty-namespace'] ) ); |
| | 163 | } |
| | 164 | |
| | 165 | /** |
| | 166 | * Test that we reject empty routes |
| | 167 | * |
| | 168 | * @expectedIncorrectUsage register_rest_route |
| | 169 | */ |
| | 170 | public function test_route_reject_empty_route() { |
| | 171 | register_rest_route( '/test-empty-route', '', array( |
| | 172 | 'methods' => array( 'POST' ), |
| | 173 | 'callback' => '__return_null', |
| | 174 | ), true ); |
| | 175 | $endpoints = $GLOBALS['wp_rest_server']->get_routes(); |
| | 176 | $this->assertFalse( isset( $endpoints['/test-empty-route'] ) ); |
| | 177 | } |
| | 178 | |
| | 179 | /** |
| 152 | 180 | * The rest_route query variable should be registered. |
| 153 | 181 | */ |
| 154 | 182 | function test_rest_route_query_var() { |