九州は梅雨入りしてしまいました〜スカッとしたいですねぇ〜。暑いのはイヤですけど(笑)
最近、技術的な感じ書いてなかったので今日は気合いを入れて書ききりました!
今回、WordPressを新規に一つ立ち上げ
本家サイトのユーザーを共有して使用することに成功しましたのでその手順とか書いてみました。
データベースが同一であることが最低条件!
まず、この仕様にする場合は「同一データベース上にテーブルがある」必要があります。
すでに立ちあげてるサイトをこの仕様にしたい場合はどちらかのテーブルを同一データベース上に持ってくればいいということになりますね。
結構大変か・・・。
そのかわり、持ってきてしまえば別のドメインでも動作します。
手順は以下の通り
1.子サイトへの変更点
まず、あらたに作った方のサイト(以下、子サイト)の wp-config.php に下記の2行を追加します。
define( 'CUSTOM_USER_TABLE', 'wp_users' ); define( 'CUSTOM_USER_META_TABLE', 'wp_usermeta' );
この時、テーブル名はそれぞれ元のサイト(以下、親サイト)のユーザーテーブル名になります。
prefixを’wp_’に指定しているなら上記の通りです。
その後、子サイトをインストールしますが・・・してしまったあとでの場合は下記の手数が発生します。
そのままログインしようとすると・・・
こんなつれないメッセージが表示されて (´・ω・`)ショボーン となります。
2.子サイトが新規でない場合は親サイトへ子サイト分の権限の追加
親サイトの wp_option テーブルを
SELECT * FROM `wp_usermeta` WHERE meta_key like '%capabilities%'
で検索しでてきた結果をSQLエクスポートします。
親サイトのoptionテーブル(この場合は wp_usermeta)に
meta_key を 新規サイトのprefixに変更してそのままインサートする。
※この場合 blog_capabilities
こんな感じのSQLが必要です。
INSERT INTO `wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, '1', 'blog_capabilities', 'a:1:{s:13:"administrator";b:1;}');
※umeta_idはauto_incrementで適当な値が入ります。
※こんな感じではなくいっぱい出た場合は ~_capabilities のところだけコピーして上記のように整形してください。
※注意点
注意点としては子サイトのユーザーは使えなくなってしまいます。
子サイトの ~_usersテーブル、~_usermetaテーブルを使用しなくなりますので。
あらたに親サイトの方に登録しておくか、全てが終わった後で追加することをおすすめします。
3.新規ユーザーの追加・更新・削除対応のコードを親・子とも追加
※下記コードを両者の functions.php に追加する
親サイト(A)
/** マルチサイト ユーザー共通化 */ function synchro_roles ( $user_id ) { $role = get_user_meta( $user_id, 'wp_capabilities' ); update_user_meta( $user_id, 'blog_capabilities', $role[0] ); } add_action( 'user_register', 'synchro_roles' ); add_action( 'profile_update', 'synchro_roles' );
子サイト(B)
/** マルチサイト ユーザー共通化 */ function synchro_roles ( $user_id ) { $role = get_user_meta( $user_id, 'blog_capabilities' ); update_user_meta( $user_id, 'wp_capabilities', $role[0] ); } add_action( 'user_register', 'synchro_roles' ); add_action( 'profile_update', 'synchro_roles' );
挿入位置はどこでもOKです。
わかりやすいなら一番上でも一番下でも。
・・・・すると
これでなんとか動き出す・・・
どちらかで新規ユーザー追加すると見事に両サイト同様になる。
これは使える!・・・と思う。
※この記事の参考になったのはWordPressフォーラムの下記のURLです。
この中の plum0710様のコードはかなりそのまま利用させていただきました。
大変ありがとうございました。
また、テスト環境では親サイト:WordPressバージョン3.9.2、子サイト:WordPressバージョン4.2.2 とバージョン差がありましたが、問題無く動きました。その辺りはやってみないとなんとも言えないですが、このユーザーの権限等の格納が同様の方式なら 3.1以上でなんとかなるような気がしないでもない・・・(もちろん自己責任でやってみて判断してください)
また、これもやってないですが、多分これはこのまま3つめ4つめ行ける感じがしますね。
ただし、セキュリティ上では、同一ユーザー同一パスワードのためひとつがバレたら一蓮托生にすべてやられる危険性があることを肝に銘じてください。
親サイトと子サイト(サブドメイン)のサイトのユーザー情報を共有したくてここにたどり着きました。記事を拝見しましたが、何分素人なので良く分かりません・・・
>>あらたに作った方のサイト(以下、子サイト)の wp-config.php に下記の2行を追加します。
>>その後、子サイトをインストールします
とありますが、インストール前は「wp-config.php」生成されていないので、行の追加ができません。私が何か勘違いしてるのでしょうか?
>>2.子サイトが新規でない場合は親サイトへ子サイト分の権限の追加
とありますが、子サイト新規の場合は「2」の工程はしなくても良いのでしょうか?
どうぞご教示お願いします。
コメントありがとうございます。
うーん。
新規インストール後、ユーザー作ってない状態であれば大丈夫だと思います。
でも、いま思うと本サイト上にいっぱいユーザーいたらやはりダメなような気がしてきました。
まぁ・・・やってみてダメだったら工程2をやってください。
工程2はちょっとハードル高いと思いますが、頑張ってみてください。