WordPressでは基本的に複数ブログは作成できません。
WordPress MUという別バージョンがあり、こちらでは複数ブログはできるのですが、これはどちらかというとホスティング向けで、完全に別の人が使い、IDなども別々にするような形を想定されています。
しかし、
・ユーザーIDはわけたくない。
・一つのサイトの中にブログが複数ある形にしたい
(例えば、「担当者ブログ」と「社長ブログ」とか)
という要件がよくあります。
これはいつも頭を悩まされるところです。
古いWordPressのバージョンでは、Multiplyというプラグインがあり、これで実現できたようなのですが、最新版(現在2.7)に対応しているものはありません。
ブログによりテーブルのプリフィックスを変えて複数運用する、という方法も編み出されていますが、別WordPress扱いになり、ユーザー情報などを共有できないため、それぞれ別にログインする必要があり、これも、要件的には満たせそうにありません。
(WordPress MUをWordPressでやってしまおうというようなイメージですね。こちらの方が本当の意味での複数ブログ、という感じはしますが)
<参考>
WordPressによる複数blog運用。(10行追加+α) マツボックリンゴ
1つのwordpressファイルで複数ブログ これどうやるの?
今回は、1ユーザーで1サイト内に複数のブログをあるように見せたいということなので、テーマファイルを変更して、カテゴリによって表示を切り替える、という方法で対応することにしました。
なんとなく簡単そうに思えますが、これが結構大変です。
例えば、
●社長ブログ
・新着情報
・日々の出来事
・経営について
●担当者ブログ
・新着情報
・日々の出来事
・新商品開発
というような構成になっていたとします。
社長ブログ、担当者ブログ、それぞれデザインを分けて、独立したブログ風に見せたいとします。
(必要なコンテンツは、月別アーカイブ、カテゴリ一覧です。)
まず、WordPressでは、カテゴリを指定しての月別アーカイブ一覧というのが表示できません。
wp_get_archivesというテンプレートタグが用意されていますが、こちらはカテゴリを指定できません。
ですから、wp_get_archivesを改造して、カテゴリを指定できるようにする必要があります。
具体的には、引数としてカテゴリを渡すようにし、archive.phpで処理をする際、そのカテゴリの記事のみを取得する、という方法です。
また、それぞれのブログの中の子カテゴリは、増えていく可能性があります。
となると、カテゴリIDを決め打ちでデザインを分ける、ということもできません。
ですから、ここは親カテゴリのIDを取得して、それで判定させる、という方法が必要です。
(親カテゴリは変更しないものと想定)
最終的にはこのようになりました。
・まず、親カテゴリIDを取得し、『社長ブログ』か『担当者ブログ』かを判断する
・wp_get_archivesを改造してカテゴリを指定できるようにしたものに、その親カテゴリIDを渡し、月別アーカイブ一覧を出す。(その際、子カテゴリの記事全てを対象とするように改造する)
・通常、月別アーカイブは、カテゴリを指定できるようになっていないので、引数としてカテゴリIDを渡すようにする。 http://○○/2009/02?c=1 というような形。
・archive.phpで、その引数を取得して、そのカテゴリ内の記事のみを一覧で表示させるようにする。
ちょっと泥臭い感じもしますが、これで実現できました。
詳しいソースは載せませんが、悩まれている方が多いと思うので、考え方として参考になれば、と思います。
<参考>
●親カテゴリの取得の仕方
http://ja.forums.wordpress.org/topic/507
$cat = get_category($id);
$parent_cat = $cat->parent;
という形で取得できます。
●子カテゴリを全て取得する方法
get_category_children関数を使います。
$cat_child = get_category_children($cat->parent)
というような形。
●元々ある関数を改造する場合
例えば、wp_get_archivesを改造する場合は、テーマフォルダ内にfunction.phpを作成し、その中にwp_get_archivesを複製します。
そして、関数名をwp_get_archives2とかに変更して、それを呼び出すようにします。
●query_postsで条件を指定する場合
$query_stringの後ろに付け足してやるといいです。
例えば、次のような感じ。
$query_posts_hikisu = $query_string . ‘&cat=’ . $cat->cat_ID;
query_posts($query_posts_hikisu);
これで、元々の出力条件にカテゴリの条件を付け足すことができます。