一つの物理OS上で複数の仮想ホストを作成しそれぞれでwordpressのサイトを稼働させている。
wordpressフォルダーを複数用意していたが、領域が二重に必要になったり、それぞれで更新するなど管理が面倒になってくる。
データベースエンジンは1インスタンスだが、それぞれのサイトに専用のデータベースを利用している。
そこで、複数サイトでそれぞれのデータベースを利用する設定ができないか試してみた。
ここでは以下の3つの形態を説明している。
- WordPress マルチサイト機能 (単一のデータベースを持つ単一のWordPress インスタンス)
- 単一のデータベースを持つ複数の WordPress インスタンス
- 複数のデータベースを持つ複数の WordPress インスタンス
しかし、以下のような形態には触れられていない。
- 複数のデータベースを持つ単一のWordPressインスタンス

ちなみに、ここでいうデータベースとは、データベースエンジン(xamppではMySQL)のことではなく、MySQLが管理している複数のデータベースのうちの一つのことらしい。ソフトウェア開発ではどちらも意味することがあるから前後の文脈から判断しないといけない。
インスタンスは二つある気がするけど、複雑になるからこのままの表記で行おう。
ここには、単一のデータベースを持つ単一のWordPressインスタンスで複数ドメインの運用例が載っている。
ここを参考にして、修正を行った。
/wordpress/wp-config.phpを以下のように書き変える。
// homeとsiteurlの指定
// homeで/wordpressが省略されているときは、siteurlに追加する
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
define( 'WP_HOME', $protocol . $_SERVER['HTTP_HOST'] );
if (strpos(WP_HOME, '/wordpress') !== false) {
define( 'WP_SITEURL', WP_HOME );
} else {
define( 'WP_SITEURL', WP_HOME . '/wordpress' );
}
// アップロードフォルダーの指定
if ( strpos(WP_HOME, 'www2.') !== false ) {
define( "UPLOADS", "wp-content/uploads/www2" );
}
// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
// www2.domain.comのときはデータベースwp-02を指定する
if (strpos(WP_HOME, 'www2.') !== false) {
define( 'DB_NAME', 'wp-02' );
} else {
define( 'DB_NAME', 'wp-01' );
}
アップロードフォルダーも別にしたいので、指定を追加した。
/wordpressを省略しているので、サイトトップのindex.phpも同じwordpressフォルダーを指すように変更しておく。
require __DIR__ . '/../../wordpress/wp-blog-header.php';
ダッシュボードの設定-一般を開くと、WordPress アドレス (URL)とサイトアドレス (URL)は入力できなくなっている。たぶん事前に定義されていたのは変更不可となるのだろう。なかなかかしこい。
行儀の悪いプラグインとか動かない可能性もあるらしいが、様子見しよう。