私のWebサイトでは、ユーザーは自分のEメールアドレスを確認したかどうかに応じてtrueまたはfalseに設定されたメタデータ属性を持っています。メールを確認していない場合はログインさせず、確認した場合はログインさせます。
これを実現するために、私はfunctions.phpファイルに次のコードを追加しました。ただし、これが設定されていると、だれもログインできなくなります。間違いはどこにありますか。
<?php
function isUserActivated($user){
$userStatus = get_user_meta($user, 'account_activated', true);
$login_page = home_url('/login/');
if($userStatus == 0){
wp_redirect($login_page . "?login=failed");
exit;
}
}
add_filter('wp_authenticate_user', 'isUserActivated');
フィルタwp_authenticate_user
を使用する場合、ユーザーオブジェクトを取得し、ユーザーIDを使用してユーザーメタを取得する必要があります
function isUserActivated($user){
$userStatus = get_user_meta($user->ID, 'account_activated', true);
// for testing $userStatus = 1;
$login_page = home_url('/login/');
if($userStatus == 0){
wp_redirect($login_page . "?login=failed");
exit;
}
return $user;
}
add_filter('wp_authenticate_user', 'isUserActivated');
しかし、authenticate
フィルターの前に実行されるため、アクションwp_authenticate
を使用した方が良いと思います。
function isUserActivated($username){
// First need to get the user object
$user = get_user_by('login', $username);
if(!$user) {
$user = get_user_by('email', $username);
if(!$user) {
return $username;
}
}
$userStatus = get_user_meta($user->ID, 'account_activated', true);
//for testing $userStatus = 1;
$login_page = home_url('/login/');
if($userStatus == 0){
wp_redirect($login_page . "?login=failed");
exit;
}
}
add_action('wp_authenticate', 'isUserActivated');