как ограничить вход пользователя в систему всякий раз, если пользователь приостановит работу путем редактирования действия wp-login?

Я написал такую ​​функциональность, как супер-администратор, который может помещать учетные записи пользователей в «hold». Я должен удостовериться, что учетная запись пользователя, у которой его учетная запись приостановлена, не может войти в систему. Проблема заключается в том, что пользователь может войти в систему, если его учетная запись приостановлена. Я использую поле «пользовательское мета», называемое «holdUser», в то время как супер-администратор помещает пользователя в режим ожидания. Во время входа в систему пользователя я использую действие wp-login WordPress, как редактировать действие wp-login, чтобы пользователь не мог войти в систему на основе пользовательского мета-поля в wordpress. Хотя учетная запись пользователя приостановлена, я обновляю «пользовательскую мета», как показано ниже:

if(isset($_GET['user_id']) && ($_GET['action']=='hold')) { update_user_meta( $_GET['user_id'], 'holdUser',1 ); wp_mail($email_to, $subject, $content,$headers); } 

Моя форма входа имеет следующий код:

 <form method="post" action="'.$this->SiteUrl.'wp-login.php"> <input type="text" id="user_login" name="log"> <input type="password" name="pwd"> <button target="" class="submit">Login</button> </form> 

Мой вопрос здесь заключается в том, как отредактировать «wp-login.php» на основе поля user_meta «holdUser», если его значение равно 1, а не для входа в этот пользователь.?

Обновление: я написал отдельный крючок, если вход в систему не работает, как показано ниже:

 add_action( 'wp_login_failed', 'my_front_end_login_fail' ); function my_front_end_login_fail( $username ) { $referrer = $_SERVER['HTTP_REFERER']; if( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') ) { if ( !strstr($referrer,'/?actiont=failed') ) { wp_redirect( $referrer . '/?actiont=failed&message=authentication-failed' ); } else { wp_redirect( $referrer ); } exit; } } 

как я могу получить это сообщение на удержание с крюка 'on_hold_error'?

Solutions Collecting From Web of "как ограничить вход пользователя в систему всякий раз, если пользователь приостановит работу путем редактирования действия wp-login?"

 function myplugin_authenticate_on_hold($user) { // username and password are correct if ($user instanceof WP_User) { $on_hold = get_user_meta($user->ID, 'is_on_hold', true); if ($on_hold) { return new WP_Error('on_hold_error', 'You are on hold'); } } return $user; } add_filter('authenticate', 'myplugin_authenticate_on_hold', 21); 

Приоритет должен быть равен 21, поскольку wp_authenticate_username_password и wp_authenticate_email_password являются приоритетными 20. Они возвращают объект типа WP_User если они могут аутентифицировать пользователя. Поэтому, если пользователь аутентифицирован, проверьте, приостановлен ли он. Если он есть, покажите пользователю ошибку.

Изменить: почему вы не используете форму входа по умолчанию?

Используйте фильтр wp_authenticate_user и верните WP_Error чтобы остановить вход в систему.

 add_filter( 'wp_authenticate_user', 'my_theme_authenticate_user', 1 ); function my_theme_authenticate_user( $user ) { if ( is_wp_error( $user ) ) { return $user; } $on_hold = get_user_meta($user->ID, 'holdUser', true ); if ( (int)$on_hold == 1) { return new WP_Error( 'get lost' ); } return $user; } 

(добавьте выше в функции functions.php вашей темы)

Кроме того, я думаю, вам может понадобиться name="loginform" элемента формы name="loginform" , чтобы WordPress мог его забрать, и обрабатывать его так же, как и пользовательскую форму входа в name="loginform" , и name="loginform" все те же перехватчики, но не уверен в этом.

PS: Для создания пользовательской формы входа рекомендуется использовать wp_login_form() , так как вы получите другие функции, такие как простой способ указания URL-адреса переадресации. https://codex.wordpress.org/Function_Reference/wp_login_form