web-dev-qa-db-ja.com

Wp-configでwp_blogsドメインを定義する方法はありますか?

私のマルチサイト設定では、同じデータベースを共有したいが異なるドメインを使用したい複数の環境があります。

  • server1.example.com
  • server2.example.com
  • example.com

...これらのそれぞれは同じデータベースを指します。 define( 'WP_HOME', 'http://server1.example.com' );define( 'WP_SITEURL', 'http://server1.example.com' );を使った標準的なWPインストールでは、これは完全にうまくいきます。

あなたがミックスにマルチサイトを追加するとき、それは壊れます。

問題は、wp_blogsテーブルがドメインも定義することです。そのため、設定ファイルでドメインを定義する方法が必要です。それをする方法はありますか?

4
developdaly

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.phpwp-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.phpdefine('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);を入れることができます。

5
chrisguitarguy

これがあなたの質問に答えているかどうかわからないが、私はこれを見つけた: http://wordpress.org/support/topic/multiple-domain-with-multisite

1
daresayer