diff --git a/src/wp-includes/ms-load.php b/src/wp-includes/ms-load.php index 56db231f25..7f9c28b2b6 100644 --- a/src/wp-includes/ms-load.php +++ b/src/wp-includes/ms-load.php @@ -154,6 +154,7 @@ function wp_get_network( $network ) { * Retrieve a site object by its domain and path. * * @since 3.9.0 + * @since 4.6.0 Converted to use get_sites() * * @global wpdb $wpdb WordPress database abstraction object. * @@ -163,8 +164,6 @@ function wp_get_network( $network ) { * @return object|false Site object if successful. False when no site is found. */ function get_site_by_path( $domain, $path, $segments = null ) { - global $wpdb; - $path_segments = array_filter( explode( '/', trim( $path, '/' ) ) ); /** @@ -231,27 +230,28 @@ function get_site_by_path( $domain, $path, $segments = null ) { $domains = array( $domain ); if ( 'www.' === substr( $domain, 0, 4 ) ) { $domains[] = substr( $domain, 4 ); - $search_domains = "'" . implode( "', '", $wpdb->_escape( $domains ) ) . "'"; } - if ( count( $paths ) > 1 ) { - $search_paths = "'" . implode( "', '", $wpdb->_escape( $paths ) ) . "'"; - } + $args = array( + 'domain__in' => $domains, + 'path__in' => $paths, + 'number' => 1, + ); if ( count( $domains ) > 1 && count( $paths ) > 1 ) { - $site = $wpdb->get_row( "SELECT * FROM $wpdb->blogs WHERE domain IN ($search_domains) AND path IN ($search_paths) ORDER BY CHAR_LENGTH(domain) DESC, CHAR_LENGTH(path) DESC LIMIT 1" ); + $args['orderby'] = 'domain_length path_length'; + $args['order'] = 'DESC DESC'; } elseif ( count( $domains ) > 1 ) { - $sql = $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE path = %s", $paths[0] ); - $sql .= " AND domain IN ($search_domains) ORDER BY CHAR_LENGTH(domain) DESC LIMIT 1"; - $site = $wpdb->get_row( $sql ); + $args['orderby'] = 'domain_length'; + $args['order'] = 'DESC'; } elseif ( count( $paths ) > 1 ) { - $sql = $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s", $domains[0] ); - $sql .= " AND path IN ($search_paths) ORDER BY CHAR_LENGTH(path) DESC LIMIT 1"; - $site = $wpdb->get_row( $sql ); - } else { - $site = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s AND path = %s", $domains[0], $paths[0] ) ); + $args['orderby'] = 'path_length'; + $args['order'] = 'DESC'; } + $result = get_sites( $args ); + $site = array_shift( $result ); + if ( $site ) { // @todo get_blog_details() return $site;