WordPress Multisiteでの各サイト限定のユーザー作成

Pocket

WordPressマルチサイトを使うと、簡単に複数サイトを作れる反面、ユーザー登録する際に、user IDが重複しやすくなる。
そこで、user_login の前に {blog_id}_ をつけることで、重複を回避してみる。
フロントエンドでの自作スクリプトからユーザー登録時する際には

        $blog_user_login = get_current_blog_id() . '-' . $user_login;

のようにuser_loginを変え、この値を user_login の値として wp_insert_user() に渡す。
 
ログイン時の認証には、authenticate hookを改造して使う。

add_filter( 'authenticate', 'multisite_authenticate', 10, 3 );
function multisite_authenticate( $user, $username, $password ){
    if (!empty($username)) {
        $blog_id = get_current_blog_id();
        $temp  = explode( '-', $username );
        if( $temp[0] != $blog_id )
            $username = get_current_blog_id() . '-' . $username;
        $user = get_user_by( 'login', $username );
        if ( $user && wp_check_password( $password, $user->data->user_pass, $user->ID ) && is_user_member_of_blog( $user->ID, $blog_id ) ) {
            return $user;
        }
        else {
          // stop login
          return null;
        }
    }
    return $user;
}

こうすることで、利用者は登録する際には好きなidを入れられるが、WPのusersテーブルのuser_loginには {blog_id}-{user_login}が保存される。
利用者がログインするときは、 {blog_id}を意識せず、 user_login の値だけでログインできる。
 

この記事を書いた人