REST API: Fix namespace shadowing issue in route matching logic.

Following [47260] a namespace such as "test-ns" prevents any namespace such as "test-ns/v1" from being found when matching routes.
While not best practice, this was an unintentional back-compat break; this patch restores the original behavior.

Props david.binda, TimothyBlynJacobs.
Fixes #48530.


Built from https://develop.svn.wordpress.org/trunk@47351


git-svn-id: http://core.svn.wordpress.org/trunk@47138 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
K. Adam White 2020-02-24 18:07:08 +00:00
parent 4aeebf03a5
commit 480372b07c
2 changed files with 7 additions and 6 deletions

View File

@ -879,16 +879,17 @@ class WP_REST_Server {
$method = $request->get_method();
$path = $request->get_route();
$routes = array();
$with_namespace = array();
foreach ( $this->get_namespaces() as $namespace ) {
if ( 0 === strpos( ltrim( $path, '/' ), $namespace ) ) {
$routes = $this->get_routes( $namespace );
break;
if ( 0 === strpos( trailingslashit( ltrim( $path, '/' ) ), $namespace ) ) {
$with_namespace[] = $this->get_routes( $namespace );
}
}
if ( ! $routes ) {
if ( $with_namespace ) {
$routes = array_merge( ...$with_namespace );
} else {
$routes = $this->get_routes();
}

View File

@ -13,7 +13,7 @@
*
* @global string $wp_version
*/
$wp_version = '5.4-beta2-47350';
$wp_version = '5.4-beta2-47351';
/**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.