こんな人向け

  • 1つのWordpressで複数のblogを運用したい。
  • ここに複数運用するための手順がいろいろ紹介されているけど、どれもめんどくさい。
  • Wordpress-MUは、Wordpress用のプラグインが使えなくなるので、使いたくない。
  • 日本のblogで紹介されている手法は、blogごとにWordpressの管理ディレクトリが作成されてしまって気持ち悪い。
  • .htaccessを設置できる or サーバ上でシンボリックリンクを張れる。

私がとったアプローチは、アクセスされてきたpathに応じてテーブル名を動的に決定する手法。 公式サイトに紹介されている内容は大がかりにコードを修正したりパッチを適用したりしています。
この方法なら数行の変更と1つの小さな設定で新たなblogを構築できます。

0.概要

Wordpressはblogの記事や設定値をデータベースに入れて保存しています。HTTPでアクセスしてきた時に、指定されたURLのpathによってWordpressが参照するテーブル(データベース)の場所を動的に変えることにより1つのWordpress設置で、複数のWordpressのblogを構築できます。

1.設定

アクセスされたURLのpathとテーブル名の関連付けを行います。
編集するファイルは、Wordpress管理ディレクトリのトップにあるwp-config.phpです。

下の例は、

http://www.tymy.net/~matsu/blog/

をメインとして運用して、

http://www.tymy.net/~matsu/milklog/

をサブとして運用する場合の例です。

/~matsu/blog/でアクセスされた場合は、テーブルのプレフィックス(先頭語)にデフォルトである”wp_”を利用します。
/~matsu/milkblog/でアクセスされた場合はプレフィックスに”wp_milklog_”を利用します。

$table_prefix = “wp_”;の後に、以下のコードを追加します。
$prefix_arrayは連想配列です。キーにURIを定義し、値に利用するテーブルのprefix($table_prefixに代入する値)を定義します。

// determine table prefix according to the REQUEST_URI
$prefix_array = array(
  '/~matsu/milklog' => 'wp_milklog_'
);

if($prefix_array){
  $uri = $_SERVER['REQUEST_URI'];
  foreach($prefix_array as $search_uri => $search_table_prefix){
    if(strpos($uri, $search_uri) === false){ continue; }
    $table_prefix = $search_table_prefix;
  }
}

次に、指定されたpathでアクセスできるように設定します。
2種類の設定方法があるのでどちらかを選択してください。SSHでログインできない場合は.htaccessによる設定を選んでください。

2.1 シンボリックリンク

指定したpathでアクセスしたときに、Wordpressのファイルを参照するようにシンボリックリンクを張ります。
1つめの引数にWordpressの実態、2つめの引数に新たに追加するblogのpathを指定します。

# wordpressが設置されているディレクトリの上で。
% ln -s blog milk_log

2.2 .htaccess

新たなpathでアクセスされたときにWordpressの実体へアクセスするようにする.htaccessです。
以下に例を載せておきます。

RewriteEngine on
RewriteBase /~matsu/

# rewrite milk blog
RewriteRule milklog/(.*) /~matsu/blog/$1
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule milklog/(.*) /~matsu/blog/index.php [L]
# /end of rewrite milk blog

アイディア元はこちら。
http://ameblo.jp/curiouseverything/entry-10167447535.html

3.新しいblogの設定

新しいblogのwordpress管理画面へアクセスするとblogの初期設定を行う画面が表示されます。

例:

http://www.tymy.net/~matsu/milklog/wp-admin/

4.注意

4.1 ファイルの作成

Wordpressによって保存されたファイル、例えばSitemapのXMLファイルなどはデータベースではなくファイルに保存されます。よって、sitemapのファイル名は各blogで別にしなければなりません。
(sitemapやrobots.txtはWebサーバ側でrewriteまたはaliasmatchしてあげるのがいいです)

4.2 互換性

Wordpress 2.5, 2.6, 2.7,2.8,2.9でも問題なく利用できています。

4.3 複数のXML Sitemapのまとめ方

複数blogのサイトマップをまとめる方法はこちらを見てください。

http://matsu.tymy.net/sitemap.xml

SitemapプロトコルのSitemap Indexを使うと複数のsitemapを1つにまとめられます。プロトコルの制約として、1階層分しかまとめられません。