- // If the network is defined in wp-config.php, we can simply use that.
- if ( defined( 'DOMAIN_CURRENT_SITE' ) && defined( 'PATH_CURRENT_SITE' ) ) {
- $current_site = new stdClass;
- $current_site->id = defined( 'SITE_ID_CURRENT_SITE' ) ? SITE_ID_CURRENT_SITE : 1;
- $current_site->domain = DOMAIN_CURRENT_SITE;
- $current_site->path = PATH_CURRENT_SITE;
- if ( defined( 'BLOG_ID_CURRENT_SITE' ) ) {
- $current_site->blog_id = BLOG_ID_CURRENT_SITE;
- } elseif ( defined( 'BLOGID_CURRENT_SITE' ) ) { // deprecated.
- $current_site->blog_id = BLOGID_CURRENT_SITE;
- }
-
- if ( 0 === strcasecmp( $current_site->domain, $domain ) && 0 === strcasecmp( $current_site->path, $path ) ) {
- $current_blog = get_site_by_path( $domain, $path );
- } elseif ( '/' !== $current_site->path && 0 === strcasecmp( $current_site->domain, $domain ) && 0 === stripos( $path, $current_site->path ) ) {
- // If the current network has a path and also matches the domain and path of the request,
- // we need to look for a site using the first path segment following the network's path.
- $current_blog = get_site_by_path( $domain, $path, 1 + count( explode( '/', trim( $current_site->path, '/' ) ) ) );
- } else {
- // Otherwise, use the first path segment (as usual).
- $current_blog = get_site_by_path( $domain, $path, 1 );
- }
-
- } elseif ( ! is_subdomain_install() ) {
- /*
- * A "subdomain" install can be re-interpreted to mean "can support any domain".
- * If we're not dealing with one of these installs, then the important part is determining
- * the network first, because we need the network's path to identify any sites.
- */
- if ( ! $current_site = wp_cache_get( 'current_network', 'site-options' ) ) {
- // Are there even two networks installed?
- $one_network = $wpdb->get_row( "SELECT * FROM $wpdb->site LIMIT 2" ); // [sic]
- if ( 1 === $wpdb->num_rows ) {
- $current_site = new WP_Network( $one_network );
- wp_cache_add( 'current_network', $current_site, 'site-options' );
- } elseif ( 0 === $wpdb->num_rows ) {
- ms_not_installed( $domain, $path );
- }
- }
- if ( empty( $current_site ) ) {
- $current_site = WP_Network::get_by_path( $domain, $path, 1 );
- }
-
- if ( empty( $current_site ) ) {
- /**
- * Fires when a network cannot be found based on the requested domain and path.
- *
- * At the time of this action, the only recourse is to redirect somewhere
- * and exit. If you want to declare a particular network, do so earlier.
- *
- * @since 4.4.0
- *
- * @param string $domain The domain used to search for a network.
- * @param string $path The path used to search for a path.
- */
- do_action( 'ms_network_not_found', $domain, $path );
-
- ms_not_installed( $domain, $path );
- } elseif ( $path === $current_site->path ) {
- $current_blog = get_site_by_path( $domain, $path );
- } else {
- // Search the network path + one more path segment (on top of the network path).
- $current_blog = get_site_by_path( $domain, $path, substr_count( $current_site->path, '/' ) );
- }
- } else {
- // Find the site by the domain and at most the first path segment.
- $current_blog = get_site_by_path( $domain, $path, 1 );
- if ( $current_blog ) {
- $current_site = WP_Network::get_instance( $current_blog->site_id ? $current_blog->site_id : 1 );
- } else {
- // If you don't have a site with the same domain/path as a network, you're pretty screwed, but:
- $current_site = WP_Network::get_by_path( $domain, $path, 1 );
- }
- }
-
- // The network declared by the site trumps any constants.
- if ( $current_blog && $current_blog->site_id != $current_site->id ) {
- $current_site = WP_Network::get_instance( $current_blog->site_id );
- }
-
- // No network has been found, bail.
- if ( empty( $current_site ) ) {
- /** This action is documented in wp-includes/ms-settings.php */
- do_action( 'ms_network_not_found', $domain, $path );