【問題】
WordPressでアカウントごとに最大同時ログイン数を制限したい
【解決方法】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
function check_current_account_login_session( $user_login ){ $user = get_user_by( 'login', $user_login ); $userID = $user->data->ID; $manager = ''; $manager = WP_Session_Tokens::get_instance( $userID ); $allSession = ''; $allSession = $manager->get_all(); // 最大同時ログイン数 $iAcceptableMaxSession = 3; // ログインしようとしているアカウントの現在のログイン数 $iCurrentUserAllSession = count( $allSession ); if( $iAcceptableMaxSession < $iCurrentUserAllSession ){ add_filter( 'authenticate', 'set_authentication_error', 40, 1 ); } } add_action( 'wp_authenticate', 'check_current_account_login_session', 5, 1 ); function set_authentication_error(){ return new WP_Error( 'over_login_session_limit', '有効同時ログイン数が上限に達しています。' ); } |
【備考】
一つのアカウントを複数人で使用されたくない場合、上記のコードをテーマフォルダ内のfunctions.phpにコピーすることで、アカウントの同時ログイン数を制限出来ます。
WordPressのログイン認証時に発動するwp_authenticateフックに、ログインしようとしているユーザーの現在のログインセッション数を取得する処理を追加しています。
もし、最大ログイン数をオーバーしていた場合、authenticateフックにWP_Errorオブジェクトを与えることで、ログインを失敗させています。
役に立った
2人中2人がこの投稿は役に立ったと言っています。