WordPressで構築したサイトを運営していると、後から子サイトや関連サイトを追加して、ログインなどのユーザー情報を共有したい場合があります。
通常はマルチサイトで子サイトを作成して、プラグインを使ってユーザー情報を共有しますが、ここではドメインが違う別サイトでユーザー情報を共有する方法をご紹介します。
■記事の目次
セットアップ手順を確認する
WordPress Codex 日本語版の「wp-config.phpの編集」には、複数サイトでユーザー情報を共有する方法が載っています。新規サイトにWordPressをインストールする前に「wp-config.php」に次の2行を追記してからインストールする方法です。
define( 'CUSTOM_USER_META_TABLE', $table_prefix.'my_usermeta' );
新規サイトのセットアップ時に CUSTOM_USER_TABLE を使用してユーザー情報を共有する方法として、次のような作業手順が載っています。
- WordPress の最初のインスタンスをセットアップします。このインスタンスの wp-config.php 内の define 文では、現在ユーザーデータを格納するテーブル、デフォルトでは wp_users テーブルを指定します。
- この wp-config.php を2番目のインストール開始前のインスタンスへコピーします。このとき $table_prefix 変数の値を変更します。
- この時点で2番目のインスタンスに正常にインストールできます。ただし最初のインスタンスで使用されたメールアドレスは使用しないでください。別のメールアドレスを使用してください。
- セットアップを終えたら、自動生成された admin アカウントとパスワードでログインします。
- 管理に使用する個人アカウントに管理者権限を付与します。
- admin をログアウトします。
- 管理者権限を付与した個人アカウントでログインします。
- 自動生成された admin アカウントを削除し、必要に応じて他のユーザーアカウントに権限を付与します。
この方法であれば、現在運用している既存サイト(親サイト)に手を入れることなく、ユーザー情報をそのまま新規サイト(子サイト)に渡して共有できます。
でもこの説明だけでは、何だか意味がよく分からないですよね。そこでここでは、WordPressでユーザー情報を共有する方法について分かりやすく説明します。
新規サイトにWordPressをインストール
複数サイトのユーザー情報を共有するには、既存サイトと同じサーバーに新規サイトを作成します。ドメインについては、既存サイトと別ドメインを想定していますが、既存サイトのサブドメインでもOKです。
事前に準備した新規サイトにWordPressをインストールしますが、インストール前に wp-config.php にdefineを2つ追記するため、レンタルサーバーが用意している「Wordpress 自動インストール」などの機能は利用できません。
そのため、WordPress 日本語サイトから既存サイト(親サイト)と同じバージョンのWrodPressをダウンロードします。ダウンロードしたファイルはzip形式なので、これを解凍してからFTPソフトを使って任意フォルダへアップロードします。
WordPressをアップロードした段階では、まだ wp-config.php が存在しないので、wp-config.php を作成するため、ブラウザで新規サイトにアクセスします。
このとき、WordPressファイルをルートディレクトにアップロードした場合は「http://www.sample.com」にアクセスします。もしも blog などの任意フォルダにアップロードした場合は「http://www.sample.com/blog/」にアクセスします。
すると下記のような画面が表示されます。内容を確認して「さあ、始めましょう!」ボタンをクリックしてください。
次に新規サイトで使用するデータベースの設定画面が表示されます。
「データベース名」「ユーザー名」「パスワード」「データベースのホスト名」は、既存サイト(親サイト)と同じ値を入力してください。サーバーの管理画面、または既存サイトの wp-config.php を確認して、それぞれの値をコピーして貼り付けましょう。
一番下の「テーブル接頭辞」には少し注意が必要です。テーブル接頭辞とは、同じデータベースで複数のWordPressを動かす場合に、それぞれのWordPressで使用するテーブルを識別するためのものです。そのため、「テーブル接頭辞」だけは、既存サイトと違うユニーク(一意)な値を入力します。
既存サイトのテーブル接頭辞は、通常デフォルトの wp_ を使用しているので、その場合は wp2_ に変更して入力すればよいでしょう。以上の設定をおこなったら「送信」ボタンをクリックします。
これで wp-config.php が作成されました。画面には「準備ができているなら…」と表示されていますが、まだ準備ができていないので「インストール実行」ボタンを押さないでください!
ここでセットアップ作業を一時中断して、wp-config.php の修正作業を行います。
wp-config.phpと新規サイトの設定方法
新規サイトの wp-config.php を開き、【 /* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。*/ 】という文章を探して、この上あたりに次の2行を貼り付けて保存してください。
# 既存サイトのテーブル接頭辞が wp_ の場合 define( 'CUSTOM_USER_TABLE', 'wp_users' ); define( 'CUSTOM_USER_META_TABLE', 'wp_usermeta' );
WordPressをインストールする前にこの作業を行うことが、ユーザー情報を共有するための肝になります!これで準備が整いました。ブラウザに表示されている「インストール実行」ボタンをクリックしましょう。
すると次のような新規サイトの初期設定画面が表示されます。
通常の初期設定画面では、「ユーザー名」と「パスワード」の入力欄がありますが、この画面では「ユーザー名」が、【ユーザーはすでに存在しています。】と表示されていて、パスワードの入力欄もありません。
これはユーザー情報が新規サイトに受け渡されて、共有された場合に表示される画面なので安心してください。ここまでくればあと一息です。
この設定画面で注意してほしいのは「メールアドレス」の入力です。ここでは、既存サイトで使用していない「メールアドレス」を入力します!入力が終わったら「WordPressをインストール」ボタンをクリックしましょう。
インストールが成功し、ログイン用の「ユーザー名」と「パスワード」が自動で生成されました。これでWordPressのインストール作業は完了です。「ログイン」ボタンをクリックして、WordPressの管理画面にアクセスしましょう!
ユーザー権限を設定する
WordPressにログインしたら、管理画面の「ユーザー」を開き、既存サイトのユーザー情報が、新規サイトに正しく受け渡されているか確認します。
管理画面にある「admin」は自動生成されたユーザーです。赤枠の権限グループをみると「管理者」になっている点に注意してください。
それ以外のユーザーは、既存サイトから受け渡しされたユーザーです。権限グループが「なし」になっています。残念ながら権限グループまでは、共有されないようです。
さてここで、既存サイトで管理者になっているユーザーに管理者権限を付与します。権限を変更したら一度ログアウトをして、先ほど管理者権限を付与したユーザー名でログインし直します。
再ログインを行ったら、自動生成された「admin(管理者)」を削除してください。この admin というユーザー名は、外部攻撃をとても受けやすいため、セキュリティ上の観点から削除することを推奨します。
その他のユーザーについては、必要に応じて適切な権限を付与してください。左上の「権限グループを変更」ボタンを使って、権限グループごとに一括変換すれば効率よく権限が変更できます。
ユーザー追加時に権限を同期する
最期に動作検証を行いましょう。既存サイトまたは新規サイトに新規ユーザーを追加すると、ユーザー情報が即時に共有されます。
これで完成と言いたいところですが、権限グループだけ同期されないのは、なんとも口惜しい感じがします…。そこでネットで色々調べたところ、サポートフォーラムで解決策を見つけました。
下記のコードを既存サイトと新規サイトの functions.php にそれぞれ貼り付けてください。コードの違いは3〜4行目のテーブル接頭辞「xxx_capabilities」の部分だけです。
# 既存サイト( wp_ )のfunctions.phpに追記するコード function synchro_roles ( $user_id ) { $role = get_user_meta( $user_id, 'wp_capabilities' ); update_user_meta( $user_id, 'wp2_capabilities', $role[0] ); } add_action( 'user_register', 'synchro_roles' ); add_action( 'profile_update', 'synchro_roles' );
# 新規サイト( wp2_ )のfunctions.phpに追記するコード function synchro_roles ( $user_id ) { $role = get_user_meta( $user_id, 'wp2_capabilities' ); update_user_meta( $user_id, 'wp_capabilities', $role[0] ); } add_action( 'user_register', 'synchro_roles' ); add_action( 'profile_update', 'synchro_roles' );
これで新規ユーザーが追加された場合にも、権限グループが完全に同期されたと思います。以上でユーザー情報を共有する作業はすべて終了です。
まとめ
いかがでしたか?ユーザー情報が共有できましたか?ここで説明した方法であれば、複数サイトであってもユーザー情報が共有できるはずです。
ところで、私がこの方法でユーザー情報を共有したキッカケは、エックスサーバーでサブドメイン型マルチサイトを構築した際に正しく動作しなかったからです。
マルチサイトにする場合、サブディレクトリ型「sample.com/sub/」であれば、ほとんどのサーバーで問題なく動きますが、サブドメイン型「sub.sample.com」の場合は、対応していないレンタルサーバーが結構あることが分かりました。
そこで、サブドメイン型マルチサイトの代替え案として、別ドメインの複数サイトでユーザー情報だけを共有する方法を試したところ、うまく動作したので公開することにしました。