wordpress 3.5 でマルチサイト機能をオンにしたり、親子間でのデータやり取りに関するメモ

同じ内容の記事は山ほどありますが、今回珍しく使ったのでメモメモ

wordpress3.x以降からマルチサイト対応になったようで、ひとつwordpressをサーバにインストールすると、それだけで複数のブログを管理できるようになったらしいです。

今までは、基本的にはひとつのwordpress用ディレクトリに1つのブログだったから、物理的にひとつのサーバで複数のwordpressを動かしたいときは、複数 wordpressをインストールする必要がありました。(僕のサーバも随分前に構築したので、その構成です。)

まだ実装されたばかりの機能だけあって、ちょっと不具合やら機能不足もあるようなんですが、提供された開発環境がマルチサイト構成で、それを利用してほしい、ということだったので対応しました。(納品物自体はまだ制作途中だけどw)

以下、ざっくりした要求

  1. マルチサイト含めて全部でシステム全体になるように
  2. サブディレクトリごとに投稿できる記事の種類とレイアウトを大きく変えたい
  3. サブディレクトリごとに投稿の権限を分けたい
  4. システムのトップページでサブディレクトリにあるそれぞれのブログ記事の情報を取得したい

こんな感じ。本当はカスタム投稿タイプを利用して、全てを一つのブログで実現できるように、って最初は考えていたんですが、権限を分けたいってことと、いただいた開発環境が既にマルチサイトで構成されていた、ということで、マルチサイトで対応をすることになりました。

そんでローカルに同じ環境を整える際の手順と、上記の要件を満たすためにやったことを簡単にまとめておきます。

1.wordpressのマルチサイト機能を有効にする。

wordpressをインストールした直下にあるwp-config.php(インストール時に生成されるファイルなので、解凍しただけではこのファイルはありません)を開いて

任意の場所に

を追加します(デフォルトでは、この記述はないです。)個人的には認証キーに関する記述のうえ辺りがおすすめです。(※理由はないです、参考にした他の方のブログがだいたいその辺だったからw)

/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */

このコメントより下に書くのはダメらしいです。これより上ならどこでもOK(っぽい)

 

2.管理画面でネットワーク設定を追加する

※スクショなくてすいません・・・。

wordpressの管理画面にログインしたら(管理者ユーザでね)左側のメニューから

ツール>ネットワークの設置

をクリックします。

表示された画面で、マルチサイトを「サブディレクトリとして運用」するか「サブドメインで運用」するかが選択できます。適宣選んでください。よく使いそうなサブディレクトリのほうが需要あるかな?選択して、インストールボタンを押します。

それが終わって次の画面が表示されると先ほど編集したwp-config.phpと.htaccessに追記するためのコードが表示されるので、コピペしてあげましょう。自分の環境では以下のようなコードが表示されました。

wp-config.phpへはこれを追加。.htaccessには既に書かれているものと重複がないように追加してください。(.htaccessの編集をミスってリダイレクトループになる現象が多発しているようです。俺もなりました(笑))

これが設定が終わったらログインし直します。

3.サブディレクトリにブログを作る

これは管理画面でボタンぽちぽちするだけでOKです。

管理者アカウントでログインすると、管理画面のヘッダの左端に「参加サイト」というリンクが表示されるようになるので、こちらで好きなだけサイトを追加します。

これって後でデータベースのなか見たら、ひとつのデータベースの中に

wordpressひとつ分のテーブル x ブログ数 + 管理用テーブルがいくつか

ってなってたんだけど、大丈夫かな・・・?(全く詳しくないけどw)何十人、何百人というユーザ数を想定している場合は、これで構築するとテーブル数半端じゃなくなるけど、問題ないんですかね?それは置いておきますが(笑)

これでひとつのwordpressで複数のブログを管理することはできるようになりました。いちいち書くまでもないですが、もちろん権限などもそれぞれのブログで細かく設定できます。(勝手に他のブログの管理者が自分のブログを編集できたら大変ですもんね。)

4. 他のブログの情報を取得する

※これは権限をしっかり設定しないと、他の利用者から他のブログの情報引っ張ってこれる可能性があるので、そこはしっかり設定ができてる前提です。(管理者以外は投稿と編集、コメント以外はできないようにする、など。テーマの編集とかはシステム全体の管理者のみ)

今回の要件のなかで、「システムのトップページでサブディレクトリにあるそれぞれのブログ記事の情報を取得したい」という条件をここで満たします。

サブディレクトリも含めて全体なので、ヘッダーとかのリンクも共通にしたいです。

例えばwordpressでよく使われている関数のget_bloginfo(‘url’)は自分自身のドメインを返しますが、サーバのドメインがwww.blog.comで、今回マルチサイト機能で作ったブログがwww.blog.com/komai/だった場合、通常www.blog.com/komai/のブログ上でget_bloginfo(‘url’)を実行するとwww.blog.comではなく、www.blog.com/komai/が返ってきます。

これで普通の多人数が利用するようなマルチサイトなら問題ないんですが、全体でひとつのシステムにしたいので、どこからでもwww.blog.com/about/などにリンク飛ばしたいときとかあると思うんです。

でもそのままwww.blog.com/komai/のブログでリンクを貼るとwww.blog.com/komai/about/に飛んでしまうわけです。これを解決したいんです。調べたらすぐでてきました。

switch_to_blog( blogID )関数を利用することで、一時的に取得する情報をID1のものに変えて、取得したい情報を得たら、restore_current_blog()元に戻す。だけです。

この二つの関数の間に書いた関数はID1のブログとして実行されるのでbloginfo(‘url’)はwww.blog.com/komai/で実行しても、www.blog.comを返します。

例としてbloginfo(‘url’)を挙げましたが、記事情報、カテゴリ、ユーザ情報なんかも取れそうですね。ちなみにblogIDはwordpress用に作ったデータベースのwp_(接頭子)blogsのレコードで確認することができます。

親ブログ(上記の場合はwww.blog.com)はwp-config.phpに記述した

define(‘BLOG_ID_CURRENT_SITE’, 1);

で確認することもできるし、任意の値にすることもできます。

カスタム投稿タイプがたくさん必要で、functions.phpいっぱいいじるのめんどくさーい、っていうときは、こんな感じにマルチサイト化して運用するのもいいかもしれません。権限がそれぞれ設定できるってのが一番でかいですね。以上です。

 

wordpress 3.5 でマルチサイト機能をオンにしたり、親子間でのデータやり取りに関するメモ」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です