From 5c038aefb30cf334c84453c70491ed16c031425a Mon Sep 17 00:00:00 2001 From: Jeremy Felt Date: Fri, 30 Sep 2016 04:10:27 +0000 Subject: [PATCH] Multisite: Ensure a consistent `WP_Site` return from `get_site_by_path()`. It is possible to short circuit `get_site_by_path()` using the `pre_get_site_by_path` filter. When this happens and a standard site object is provided, we can make sure it is upgraded to a proper `WP_Site` object before passing it on. Props flixos90. Fixes #37053. Built from https://develop.svn.wordpress.org/trunk@38681 git-svn-id: http://core.svn.wordpress.org/trunk@38624 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/ms-load.php | 18 +++++++++++------- wp-includes/version.php | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/wp-includes/ms-load.php b/wp-includes/ms-load.php index abd70b803b..06673f65ac 100644 --- a/wp-includes/ms-load.php +++ b/wp-includes/ms-load.php @@ -137,13 +137,14 @@ function get_network_by_path( $domain, $path, $segments = null ) { * Retrieve a site object by its domain and path. * * @since 3.9.0 + * @since 4.7.0 Updated to always return a `WP_Site` object. * * @global wpdb $wpdb WordPress database abstraction object. * * @param string $domain Domain to check. * @param string $path Path to check. * @param int|null $segments Path segments to use. Defaults to null, or the full path. - * @return object|false Site object if successful. False when no site is found. + * @return WP_Site|false Site object if successful. False when no site is found. */ function get_site_by_path( $domain, $path, $segments = null ) { $path_segments = array_filter( explode( '/', trim( $path, '/' ) ) ); @@ -186,15 +187,18 @@ function get_site_by_path( $domain, $path, $segments = null ) { * * @since 3.9.0 * - * @param null|bool|object $site Site value to return by path. - * @param string $domain The requested domain. - * @param string $path The requested path, in full. - * @param int|null $segments The suggested number of paths to consult. - * Default null, meaning the entire path was to be consulted. - * @param array $paths The paths to search for, based on $path and $segments. + * @param null|bool|WP_Site $site Site value to return by path. + * @param string $domain The requested domain. + * @param string $path The requested path, in full. + * @param int|null $segments The suggested number of paths to consult. + * Default null, meaning the entire path was to be consulted. + * @param array $paths The paths to search for, based on $path and $segments. */ $pre = apply_filters( 'pre_get_site_by_path', null, $domain, $path, $segments, $paths ); if ( null !== $pre ) { + if ( false !== $pre && ! $pre instanceof WP_Site ) { + $pre = new WP_Site( $pre ); + } return $pre; } diff --git a/wp-includes/version.php b/wp-includes/version.php index fa0682d3fb..e0b5927c6f 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '4.7-alpha-38680'; +$wp_version = '4.7-alpha-38681'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.