Auf meiner Website haben Benutzer ein Metadatenattribut, das entweder auf true oder false festgelegt ist, je nachdem, ob sie ihre E-Mail-Adresse bestätigt haben oder nicht. Ich versuche, sie nicht anmelden zu lassen, wenn sie ihre E-Mail nicht bestätigt haben, sondern sie sich anmelden zu lassen, wenn sie dies getan haben.
Um dies zu erreichen, habe ich meiner functions.php-Datei den folgenden Code hinzugefügt. Mit dieser Option kann sich jedoch niemand anmelden. Wo liegt der Fehler?
<?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');
Wenn Sie den Filter wp_authenticate_user
verwenden, erhalten Sie das Benutzerobjekt, für das Sie die Benutzer-ID verwenden müssen, um das Benutzer-Meta abzurufen
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');
Aber ich denke, Sie sollten die Aktion wp_authenticate
besser verwenden, da sie vor dem Filter authenticate
ausgeführt wird.
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');