私のマルチサイト設定では、同じデータベースを共有したいが異なるドメインを使用したい複数の環境があります。
...これらのそれぞれは同じデータベースを指します。 define( 'WP_HOME', 'http://server1.example.com' );
とdefine( 'WP_SITEURL', 'http://server1.example.com' );
を使った標準的なWPインストールでは、これは完全にうまくいきます。
あなたがミックスにマルチサイトを追加するとき、それは壊れます。
問題は、wp_blogs
テーブルがドメインも定義することです。そのため、設定ファイルでドメインを定義する方法が必要です。それをする方法はありますか?
WordPressがマルチサイトをロードすると、関連するMS固有のファイルが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
ファイルをドロップすることができます。あなたがあなたのwp-config.php
にdefine('SUNRISE', true);
を入れているなら、それは含まれます。このファイルは、カスタムドメインに基づいて現在のサイトとブログを設定するためのドメインマッピングに使用されるものと同じです。 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
を落としてあなたのローカルのwp-configにdefine('SUNRISE', true);
を入れることができます。
これがあなたの質問に答えているかどうかわからないが、私はこれを見つけた: http://wordpress.org/support/topic/multiple-domain-with-multisite