Дополнительная проверка WordPress при входе в систему - PullRequest
0 голосов
/ 05 мая 2020

Когда пользователь регистрируется на моем сайте, я установил значение столбца user_activation_key из таблицы wp_users следующим образом:

$code = sha1( $user_id . time() );   

global $wpdb; 

$wpdb->update( 
    $wpdb->prefix.'users', //table name     
    array( 'user_activation_key' => $code ),       
    array( 'ID' =>    $user_id ),     
    array( '%s' ),
    array( '%d' ) 
);

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

$activation_link = add_query_arg( 
    array( 
        'key' => $code, 
        'user' => $user_id 
    ), get_permalink( 44 )
);  

$message = "<div style='padding : 20px; border : 1px solid #ddd; color : #000;'>Hello $surname, <br/><br/>Please confirm your email addresss . Click this link to confirm : <a href='$activation_link'>Confirm Now</a><br/><br/></div>";

$to         = $email;
$subject    = 'Confirm your registration process"';
$body       = $message;
$headers    = array('Content-Type: text/html; charset=UTF-8');

wp_mail( $to, $subject, $body, $headers );

Теперь столбец user_activation_key имеет код ha sh, а значение столбца user_status равно 0

Теперь актуальный вопрос:

Когда пользователь go - www.site.com/wp-admin, это означает страницу входа, я хочу показать сообщение об ошибке, если значение столбца user_status равно 0.

Я не делаю ' есть идеи, какой крючок или как я могу это проверить при входе в систему?

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Я решил проблемы с помощью ловушки wp_authenticate_user. Вот код:

add_filter( 'wp_authenticate_user', 'shibbir_authenticate_user', 10, 2 );
function shibbir_authenticate_user( $user ) {
    if ( $user->data->user_status  == 0 ) {
        return new WP_Error( 'error', __( 'Your account is not activate, Please contact site admininstrator.' , 'shibbir' ) );
    }
    return $user;
}
0 голосов
/ 05 мая 2020

Используйте ловушку admin_notices для отображения сообщений в бэкэнде, код ниже аналогичен тому, что было после:

add_action('admin_notices', 'account_activation_check');

function account_activation_check() {
  global $wpdb;
  // setup vars //
  $currentID = get_current_user_id();
  $user = get_user_by( 'ID', $currentID );
  $userStatus = $user->user_status;
  // check if user status is 0 //
  if($userStatus == 0) {
    echo '<div class="error"><p>Your email has not been verified!</p></div>';
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...