Make WordPress Core


Ignore:
Timestamp:
03/24/2014 12:13:48 AM (11 years ago)
Author:
nacin
Message:

Introduce a ms_site_not_found filter to replace NOBLOGREDIRECT.

Move some processing down below the point where we bail if there's no site. Add more documentation.

props jeremyfelt.
fixes #21143, see #27003.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/ms-settings.php

    r27406 r27663  
    6868        /*
    6969         * A "subdomain" install can be re-interpreted to mean "can support any domain".
    70          * If we're not dealing with one of these installs, then the important part is determing
     70         * If we're not dealing with one of these installs, then the important part is determining
    7171         * the network first, because we need the network's path to identify any sites.
    7272         */
     
    109109    }
    110110
    111     // If we don't have a network by now, we have a problem.
     111    // No network has been found, bail.
    112112    if ( empty( $current_site ) ) {
    113113        ms_not_installed();
     114    }
     115
     116    // @todo Investigate when exactly this can occur.
     117    if ( empty( $current_blog ) && defined( 'WP_INSTALLING' ) ) {
     118        $current_blog = new stdClass;
     119        $current_blog->blog_id = $blog_id = 1;
     120    }
     121
     122    // No site has been found, bail.
     123    if ( empty( $current_blog ) ) {
     124        // We're going to redirect to the network URL, with some possible modifications.
     125        $scheme = is_ssl() ? 'https' : 'http';
     126        $destination = "$scheme://{$current_site->domain}{$current_site->path}";
     127
     128        /**
     129         * Fires when a network can be determined but a site cannot.
     130         *
     131         * At the time of this action, the only recourse is to redirect somewhere
     132         * and exit. If you want to declare a particular site, do so earlier.
     133         *
     134         * @since 3.9.0
     135         *
     136         * @param object $current_site The network that had been determined.
     137         * @param string $domain       The domain used to search for a site.
     138         * @param string $path         The path used to search for a site.
     139         */
     140        do_action( 'ms_site_not_found', $current_site, $domain, $path );
     141
     142        if ( is_subdomain_install() && ! defined( 'NOBLOGREDIRECT' ) ) {
     143            // For a "subdomain" install, redirect to the signup form specifically.
     144            $destination .= 'wp-signup.php?new=' . str_replace( '.' . $current_site->domain, '', $domain );
     145        } elseif ( is_subdomain_install() ) {
     146            // For a "subdomain" install, the NOBLOGREDIRECT constant
     147            // can be used to avoid a redirect to the signup form.
     148            // Using the ms_site_not_found action is preferred to the constant.
     149            if ( '%siteurl%' !== NOBLOGREDIRECT ) {
     150                $destination = NOBLOGREDIRECT;
     151            }
     152        } elseif ( 0 === strcasecmp( $current_site->domain, $domain ) ) {
     153            /*
     154             * If the domain we were searching for matches the network's domain,
     155             * it's no use redirecting back to ourselves -- it'll cause a loop.
     156             * As we couldn't find a site, we're simply not installed.
     157             */
     158            ms_not_installed();
     159        }
     160
     161        header( 'Location: ' . $destination );
     162        exit;
    114163    }
    115164
     
    122171    // Figure out the current network's main site.
    123172    if ( ! isset( $current_site->blog_id ) ) {
    124         if ( $current_blog && $current_blog->domain === $current_site->domain && $current_blog->path === $current_site->path ) {
     173        if ( $current_blog->domain === $current_site->domain && $current_blog->path === $current_site->path ) {
    125174            $current_site->blog_id = $current_blog->blog_id;
    126175        } else {
     
    128177            $current_site->blog_id = $wpdb->get_var( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE domain = %s AND path = %s",
    129178                $current_site->domain, $current_site->path ) );
    130         }
    131     }
    132 
    133     // If we haven't figured out our site, give up.
    134     if ( empty( $current_blog ) ) {
    135         if ( defined( 'WP_INSTALLING' ) ) {
    136             $current_blog->blog_id = $blog_id = 1;
    137 
    138         } elseif ( is_subdomain_install() ) {
    139             // @todo This is only for an open registration subdomain network.
    140             if ( defined( 'NOBLOGREDIRECT' ) ) {
    141                 if ( '%siteurl%' === NOBLOGREDIRECT ) {
    142                     $destination = "http://" . $current_site->domain . $current_site->path;
    143                 } else {
    144                     $destination = NOBLOGREDIRECT;
    145                 }
    146             } else {
    147                 $destination = 'http://' . $current_site->domain . $current_site->path . 'wp-signup.php?new=' . str_replace( '.' . $current_site->domain, '', $domain );
    148             }
    149             header( 'Location: ' . $destination );
    150             exit;
    151 
    152         } else {
    153             if ( 0 !== strcasecmp( $current_site->domain, $domain ) ) {
    154                 header( 'Location: http://' . $current_site->domain . $current_site->path );
    155                 exit;
    156             }
    157             ms_not_installed();
    158179        }
    159180    }
Note: See TracChangeset for help on using the changeset viewer.