この記事の所要時間: 54

20140119-161635.jpg
九州は梅雨入りしてしまいました〜スカッとしたいですねぇ〜。暑いのはイヤですけど(笑)

最近、技術的な感じ書いてなかったので今日は気合いを入れて書ききりました!

今回、WordPressを新規に一つ立ち上げ
本家サイトのユーザーを共有して使用することに成功しましたのでその手順とか書いてみました。

データベースが同一であることが最低条件!

まず、この仕様にする場合は「同一データベース上にテーブルがある」必要があります。

すでに立ちあげてるサイトをこの仕様にしたい場合はどちらかのテーブルを同一データベース上に持ってくればいいということになりますね。
結構大変か・・・。
そのかわり、持ってきてしまえば別のドメインでも動作します。

手順は以下の通り

1.子サイトへの変更点

まず、あらたに作った方のサイト(以下、子サイト)の wp-config.php に下記の2行を追加します。

define( 'CUSTOM_USER_TABLE', 'wp_users' );
define( 'CUSTOM_USER_META_TABLE', 'wp_usermeta' );

この時、テーブル名はそれぞれ元のサイト(以下、親サイト)のユーザーテーブル名になります。
prefixを’wp_’に指定しているなら上記の通りです。

その後、子サイトをインストールしますが・・・してしまったあとでの場合は下記の手数が発生します。

そのままログインしようとすると・・・
スクリーンショット 2015-06-08 11.15.50
こんなつれないメッセージが表示されて (´・ω・`)ショボーン となります。

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つめ行ける感じがしますね。
ただし、セキュリティ上では、同一ユーザー同一パスワードのためひとつがバレたら一蓮托生にすべてやられる危険性があることを肝に銘じてください。

この記事が気に入ったら
いいね ! しよう

Twitter で