Wordpress

WordPressでアカウントごとに最大同時ログイン数を制限したい

【問題】
WordPressでアカウントごとに最大同時ログイン数を制限したい

【解決方法】

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オブジェクトを与えることで、ログインを失敗させています。