diff --git a/wp-includes/ms-blogs.php b/wp-includes/ms-blogs.php index cdb9691b90..ab98d6e5cb 100644 --- a/wp-includes/ms-blogs.php +++ b/wp-includes/ms-blogs.php @@ -70,23 +70,38 @@ function get_blogaddress_by_name( $blogname ) { } /** - * Retrieves a site's ID given its (subdomain or directory) slug. + * Retrieves a sites ID given its (subdomain or directory) slug. * * @since MU (3.0.0) * @since 4.7.0 Converted to use get_sites(). - * @since 4.9.0 Converted to use get_site_by(). * * @param string $slug A site's slug. * @return int|null The site ID, or null if no site is found for the given slug. */ function get_id_from_blogname( $slug ) { - $result = get_site_by( 'slug', $slug ); + $current_network = get_network(); + $slug = trim( $slug, '/' ); - if ( ! $result ) { + if ( is_subdomain_install() ) { + $domain = $slug . '.' . preg_replace( '|^www\.|', '', $current_network->domain ); + $path = $current_network->path; + } else { + $domain = $current_network->domain; + $path = $current_network->path . $slug . '/'; + } + + $site_ids = get_sites( array( + 'number' => 1, + 'fields' => 'ids', + 'domain' => $domain, + 'path' => $path, + ) ); + + if ( empty( $site_ids ) ) { return null; } - return $result->id; + return array_shift( $site_ids ); } /** @@ -528,118 +543,6 @@ function get_site( $site = null ) { return $_site; } -/** - * Retrieves a site by a given field and value. - * - * @since 4.9.0 - * - * @param string $field Name of a field to query against. Accepts 'id', 'slug', 'url', - * 'domain' (if a subdomain install) or 'path' (if a subdirectory install). - * @param string|int $value The search value for $field. - * @param int|null $network_id Optional. ID of the network. Default is the current network. - * @return WP_Site|null The site object or null if not found. - */ -function get_site_by( $field, $value, $network_id = null ) { - $args = array(); - - // `get_sites()` will return unexpected results if empty strings are passed as arguments. - if ( 'slug' === $field || 'url' === $field || 'domain' === $field || 'path' === $field ) { - if ( ! is_string( $value ) && ! is_numeric( $value ) ) { - return null; - } - - $value = trim( $value ); - - if ( 0 === strlen( $value ) ) { - return null; - } - } - - switch ( $field ) { - case 'id': - if ( ! is_numeric( $value ) ) { - return null; - } - $args['site__in'][] = intval( $value ); - break; - case 'slug': - $network = get_network( $network_id ); - if ( ! $network ) { - return null; - } - - if ( is_subdomain_install() ) { - $args['domain'] = trim( $value, '/' ) . '.' . preg_replace( '|^www\.|', '', $network->domain ); - $args['path'] = $network->path; - } else { - $args['domain'] = $network->domain; - $args['path'] = $network->path . trim( $value, '/' ) . '/'; - } - break; - case 'url': - if ( 0 !== strpos( $value, 'http://' ) && 0 !== strpos( $value, 'https://' ) ) { - $value = 'http://' . $value; - } - - $parts = wp_parse_url( $value ); - if ( ! $parts ) { - return null; - } - - $args['domain'] = $parts['host']; - if ( ! empty( $parts['path'] ) ) { - $args['path'] = '/' . trim( $parts['path'], '/' ) . '/'; - } else { - $args['path'] = '/'; - } - break; - case 'domain': - if ( ! is_subdomain_install() ) { - return null; - } - - $args['domain'] = $value; - break; - case 'path': - if ( is_subdomain_install() ) { - return null; - } - - $args['path'] = '/' . trim( $value, '/' ) . '/'; - break; - default: - return null; - } - - if ( isset( $args['domain'] ) && substr( $args['domain'], 0, 4 ) === 'www.' ) { - $nowww = substr( $args['domain'], 4 ); - - $args['domain__in'] = array( $nowww, $args['domain'] ); - unset( $args['domain'] ); - - $args['orderby'] = 'domain_length'; - $args['order'] = 'DESC'; - } - - if ( isset( $args['path'] ) ) { - $args['path'] = str_replace( '//', '/', $args['path'] ); - } - - if ( ! empty( $network_id ) ) { - $args['network_id'] = (int) $network_id; - } - - $args['number'] = 1; - - $sites = get_sites( $args ); - - if ( empty( $sites ) ) { - return null; - } - - return array_shift( $sites ); -} - /** * Adds any sites from the given ids to the cache that do not already exist in cache. * diff --git a/wp-includes/version.php b/wp-includes/version.php index 73c996e685..3c2222f08e 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '4.9-beta2-41883'; +$wp_version = '4.9-beta2-41884'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.