複数のサイトでユーザー情報を共有する方法です
コピペ可能です。ググってもうまく実現できなかった方へ不足していた情報とコピペで実現できるコードをプレゼントします。webで検索すると下記のようにwp-config.phpに追記するようにかいてあります。
前提は
・同じデーターベースを使うこと
・後からインストールするワードプレスのprefixを重複しないものにすること
config.php
define('WP_DEBUG', false);
---------------ここの部分を追記する------------------
define('CUSTOM_USER_TABLE','wp_users');
define('CUSTOM_USER_META_TABLE','wp_usermeta');
-----------------------------------------------
/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */
しかしこれだけではうまく機能しません。ユーザーに権限が与えられていないのです。
え?テーブルを共有してるんじゃ?とおもいますね。共有するという意味は、『同じテーブルを使うというだけの意味!』ここがポイントです。
同じテーブルは使いますが保存される情報の一部はサイトによってメタキーが違うのです。以下そのリストです。prefixは無視します。
capabilities, user_level, dashboard_quick_press_last_post_id
これらのメタ情報を書き換えなければ管理者といえども管理画面には入れません。ですので『新しくインストールした管理者権限でログインして権限を与えましょう。』などと、書いてあります。手作業なんて無理という方は続きを読んでください。
さらに管理者の場合は以下の情報も書き換えなければなりません。
user-settings, user-settings-time
以下その対処法です。
元からあるサイトのfunctions.php
function arumakan_user_update($user_id){
global $table_prefix;
$arumakan_prefix = array('wp1_', 'wp2_');//後から追加するワードプレスのprefix。さらに追加する場合は配列に追加すれば可。
$capabilities = get_user_meta( $user_id, $table_prefix.'capabilities', true );
$user_level = get_user_meta( $user_id, $table_prefix.'user_level', true );
$user_settings = get_user_meta( $user_id, $table_prefix.'user-settings', true );
$user_settings_time = get_user_meta( $user_id, $table_prefix.'user-settings-time', true );
$dqplpi = get_user_meta( $user_id, $table_prefix.'dashboard_quick_press_last_post_id', true );
foreach( $arumakan_prefix as $prefix ){
if( !empty($capabilities) ){
update_user_meta( $user_id, $prefix.'capabilities', $capabilities );
}
if( !empty($user_level) ){
update_user_meta( $user_id, $prefix.'user_level', $user_level );
}
if( !empty($user_settings) ){
update_user_meta( $user_id, $prefix.'user-settings', $user_settings );
}
if( !empty($user_settings_time) ){
update_user_meta( $user_id, $prefix.'user-settings-time', $user_settings_time );
}
if( !empty($dqplpi) ){
update_user_meta( $user_id, $prefix.'dashboard_quick_press_last_post_id', $dqplpi );
}
}
}
add_action('edit_user_profile_update', 'arumakan_user_update' );
get_user_metaは非効率だという方はget_userdataを使ってオブジェクトを取得しましょう。
更に一度に書き換えたいとおっしゃる方にはフックを変えれば実現可能ですね。そのうえでforeachで回せば良いと思います。
ユーザー情報を共有したからといって一つのサイトにログインすれば他のサイトにもログイン状態が共有される訳ではありません。SESSIONを他のサイトにも投げてあげる必要があるからです。