こんな人向け

  • 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://matsu.tymy.net/blog/

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

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

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

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

$prefix_arrayは連想配列です。キーにURIを定義し、値に利用するテーブルのprefix($table_prefixに代入する値)を定義します。以下にdiffを載せておきます。

% rcsdiff -r1.1 -r1.3 wp-config.php
===================================================================
RCS file: RCS/wp-config.php,v
retrieving revision 1.1
retrieving revision 1.3
diff -r1.1 -r1.3
17a18,31
> // 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://matsu.tymy.net/milklog/wp-admin/

4.注意

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


Wordpress 2.5, 2.6, 2.7,2.8,2.9でも問題なく利用できています。
Wordpress 3.0が登場し、あるディレクトリ以下であれば複数ブログに対応できます。ゼロから構築する人はWordpress 3.0自体の機能を使った方が良いかもしれません。しかしながら、Wordpress 3.0を利用した際は様々な設定を行わなければならないのでデメリットもあります。ご自分の要望に合った方法を選んでください。