WordPressのマルチサイト機能を使って1000のブログを立ち上げてみた

2014.01.21 (Tue)

株式会社ブレインネット

WEB制作

どうも、今年はお正月太りしなくて大丈夫だと油断してしまい、会社が始まって2週間、ランチにディナーに炭水化物(特にらーめん)を取り過ぎたせいか2kg太ってしまった制作部「うけっち」です。

今回は、「WordPressのマルチサイト機能を使って1000のブログを立ちあげてください」という非情(?)な指令が上から下されたので、いろいろやってみた事の忘備録です。

0.WordPressのマルチサイト機能とは

簡単に言うと「1つのサーバーにWordPressを1つインストールし、複数のブログを管理運用する」こと(参考

マルチサイトのメリット

・管理が一元化できる
・テーマ、プラグインの共通化も可
・データベースが1つでいい

マルチサイトのデメリット

・WordPress初心者には敷居が高い
・テーマ・プラグインを個々に設定した場合、管理側で把握しにくい
・「wp-config.php」や「.htaccess」をいぢるので最初の設定が少し面倒
・プラグインの中にはマルチに未対応の物があるらしい
・既存サイトをマルチにするにはそれなりにハードルは高いらしい
・サーバーによってはマルチにできないことがあるらしい
(※「らしい」で締めている物は、自分で確認した物ではないので「らしい」に致しました。)

マルチサイトの方法としては以下の2種類を設定中に選択します。

  1. サブドメイン型:
     例 site1.example.com、site2.example.com・・・とサブドメイン毎に運用する
  2. サブディレクトリ型:
     例 example.com/site1/、example.com/site2/・・・とディレクトリ毎に運用する

今回はサブドメインを1000個用意できないため2.サブディレクトリ型で行きます。

1.WordPressをインストール

こちらのサイトより最新版をダウンロード(日本語版Ver 3.8) インストール方法は割愛します。

WordPress インストール画面WordPress インストール ダッシュボード

2.マルチサイトの有効化

サーバーより設定ファイル「wp-config.php」を取得し、

define('WP_ALLOW_MULTISITE', true);

を記述してアップロード。

マルチサイト化

アップロード後、WordPressメニューの[ツール]を開くと【ネットワークの設置】が追加されています。(無い場合は[F5]キーでリロード)

ネットワークの設置メニュー追加

3.WordPressサイトのネットワークの作成

[ネットワークの設置]をクリックすると、【ネットワーク作成画面】が開きます。
「サブディレクトリ」を選択し、「ネットワークのタイトル」「サイトネットワーク管理者のメールアドレス」を入力後、【インストール】をクリック。

WordPressサイトのネットワークの作成

すると【ネットワークを有効中】画面になるので、以下の赤枠をコピー。

ネットワークを有効化中

1.の赤枠は先程取得した「wp-config.php」に追記しアップロード

マルチサイトのための定数を定義

2.の赤枠はインストール時に生成された「.htaccess」に追記しアップロード

htaccessに追記

WordPressを再起動

再起動

4.サイトの追加

再起動後、新しく追加されたメニュー【サイトネットワーク管理者】より[サイト]をクリック。

サイトネットワーク管理者

【サイト】の管理画面になるので[新規追加]をクリック。

サイト管理画面

「サイトのアドレス」「サイトのタイトル」「管理者メールアドレス」入力後、[サイト追加]をクリック。

サイト追加

無事、サイトが追加されました。

追加完了

作成したサイトの管理者メールアドレス宛にログイン情報が送信されてきます。

新しいサイトのID/PW 新しいサイトのID/PW

5. 1000サイトの追加

同様の方法で1000サイト立ち上げるには中々の時間と労力を要するのでここはひとつ、SQLを駆使して簡単にできないかと思い模索しました。

テーブルの確認

サブサイト「0001」を追加した際作成されたデータはどこなのかを確認。以下のテーブルへのレコード追加とテーブル自体の追加が行われていました。
(※テーブル名の前についている「b_」はプレフィックスなので自分の環境に合わせて見てください。)

レコード追加テーブル

  • b_users
  • b_usermeta
  • b_blogs
  • b_registration_log

追加テーブル(サイトごとに番号増加)

  • b_1_commentmeta
  • b_1_comments
  • b_1_links
  • b_1_options
  • b_1_postmeta
  • b_1_posts
  • b_1_terms
  • b_1_term_relationships
  • b_1_term_taxonomy

ストアドプロシージャの作成

サイトを2つ3つと増やしても、同じ法則で増えて行くのでこれは何とかなると思い、早速「ストアドプロシージャ」を作成。レコード追加の部分は容易く1000サイト分のデータを追加する事ができ、続いて1000サイト分のテーブル作成。するとここで思わぬ事態が・・・

テーブルを作成する「CREATE TABLE」文をプリペアドステートメントで動的に生成させるようにし、登録。「phpMyadmin」で「CALL ストアドプロシージャ名[実行]」したところ以下のエラーが発生。

PROCEDURE ストアドプロシージャ名 can't return a result set in the given context

調べてみると、どうやらphpMyadminからCALLする際はプリペアドステートメントで動的に行えないとのこと。(こちら参照させて頂きました)実行できるようにするにはサーバーの設定を変更するかコマンドプロンプトでストアドプロシージャを実行しなければならないとか。サーバーの設定変更はできない、SSHで接続できる情報は貰っていない、時間がない。。。

※遺憾ながら「CREATE TABLE」文を1000サイト分吐きだすツールを自作し対応してしまいました。ここまで読んで頂き誠に残念ではありますが、この様な結果になってしまったのでお詫びに作成したストアドプロシージャを置いておきます。実行する際は自己責任でお願いします。

1000サイトの出来上がり

紆余曲折ありましたが取りあえず目標達成。負荷テストするには十分な仕上がりと相成りました。

参考サイト:ファーストサーバ http://wp.fsv.jp/guide/multisite-subdirectory/

タグ
更新をチェック

Facebookでフォローする

関連記事
この記事を書いた人
バックナンバー
  

更新をチェック

ブレインネットプレス カテゴリー

▲ページTOPへ