有没有办法在wp-config中定义wp_blogs域?

时间:2012-11-19 作者:developdaly

在我的多站点设置中,我有多个想要共享同一数据库但使用不同域的环境。

服务器1。实例com服务器2。实例com示例。com。。。每一个都指向同一个数据库。这在标准WP安装中运行良好,使用define( \'WP_HOME\', \'http://server1.example.com\' );define( \'WP_SITEURL\', \'http://server1.example.com\' );.

将多站点添加到混合中时,它会中断。

The problem is that the wp_blogs table defines the domains too, so I need a way to define them in the config file. Is there anyway to do that?

2 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

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配置。

SO网友:daresayer

不确定这是否回答了您的问题,但我发现:http://wordpress.org/support/topic/multiple-domain-with-multisite

结束