WordPress加载多站点时,会在wp-settings.php
相关线路:
<?php
// Initialize multisite if enabled.
if ( is_multisite() ) {
require( ABSPATH . WPINC . \'/ms-blogs.php\' );
require( ABSPATH . WPINC . \'/ms-settings.php\' );
} elseif ( ! defined( \'MULTISITE\' ) ) {
define( \'MULTISITE\', false );
}
ms-settings.php
用途与
wp-settings.php
: 加载多站点环境,并且(更重要的是,出于我们的目的)设置当前站点(博客集合)和博客。但也有以下几个宝石:
if ( defined( \'SUNRISE\' ) )
include_once( WP_CONTENT_DIR . \'/sunrise.php\' );
/** Check for and define SUBDOMAIN_INSTALL and the deprecated VHOST constant. */
ms_subdomain_constants();
if ( !isset( $current_site ) || !isset( $current_blog ) ) {
// setup current site and blog
}
最重要的是:
if(defined(\'SUNRISE\'))
. 这可以让您
sunrise.php
在您的
wp-content
目录如果你
define(\'SUNRISE\', true);
在您的
wp-config.php
. 此文件与用于域映射以基于自定义域设置当前站点和博客的文件相同。你可以用它来建立你自己的网站和博客,而不是让WordPress来帮你。
举个简单的例子——这很好,但可能需要一些改进。
<?php
// sunrise.php
$host = $_SERVER[\'HTTP_HOST\'];
if(\'wpmscustom.dev\' == $host)
{
// switch the host.
$host = \'wpms.dev\';
}
if(is_subdomain_install())
{
$sql = $wpdb->prepare("SELECT * FROM {$wpdb->blogs} WHERE domain = %s LIMIT 1", $host);
}
else
{
// this probably needs some work.
$path = explode(\'/\', ltrim($_SERVER[\'REQUEST_URI\'], \'/\'));
if(count($path))
$path = \'/\' . $path[0];
else
$path = \'/\';
$sql = $wpdb->prepare("SELECT * FROM {$wpdb->blogs} WHERE domain = %s AND path = %s LIMIT 1", $host, $path);
}
if($_blog = $wpdb->get_row($sql))
{
$current_blog = $_blog;
$blog_id = $_blog->blog_id;
$site_id = $current_blog->site_id;
// set current site
$current_site = $wpdb->get_row(
$wpdb->prepare("SELECT * from {$wpdb->site} WHERE id = %d", $site_id)
);
$current_site->blog_id = $blog_id;
$current_site = get_current_site_name($current_site);
}
自
@kaiser 很可能会插话说
$_SERVER[\'HTTP_HOST\']
是不可靠的,您可能需要确保您的服务器实际具有可用性。
或者像这样做。。。
<?php
if(isset( $_SERVER[\'HTTP_HOST\']))
{
$host = $_SERVER[\'HTTP_HOST\'];
}
elseif(isset($_SERVER[\'SERVER_NAME\']))
{
$host = $_SERVER[\'SERVER_NAME\'];
}
你可以放下上面的
sunrise.php
在本地安装并放置
define(\'SUNRISE\', true);
进入本地的wp配置。