Вход в Wordpress с именем пользователя, электронной почтой и пользовательским метаполем - PullRequest
0 голосов
/ 21 ноября 2018

Я работаю над пользовательской формой входа в Wordpress.В настоящее время пользователи могут войти в систему со своим именем пользователя или электронной почтой, но я также хочу добавить опцию для пользователя их номер счета.Номер учетной записи является настраиваемым метаполем и отличается от идентификатора.

Я нашел следующие хуки

  • wp_authenticate_user
  • wp_authenticate_username_password

, но я видел в Интернете варианты удаления имени пользователяэлектронной почты, а не способы добавления мета-полей.

С уважением

1 Ответ

0 голосов
/ 21 ноября 2018

Вам необходимо добавить поле номера счета в форму входа, а затем проверить или подтвердить в соответствии с вашими потребностями, используя wp_authenticate_user hook.

Так что вы можете попробовать что-то вроде этого:

//Add account number field on login form
add_action( 'login_form', 'myplugin_add_login_fields' );
function myplugin_add_login_fields() {
    $account_number = ( isset( $_POST['account_number'] ) ) ? $_POST['account_number'] : '';
    ?>
    <p>
        <label for="account_number"><?php _e('Account Number','mydomain') ?><br />
            <input type="text" name="account_number" id="account_number" class="input" value="<?php echo esc_attr(stripslashes($account_number)); ?>" size="25" /></label>
    </p>
    <?php
}

//check if account number is present or throw error if its not provided by the user.
//do any extra validation stuff here e.g. get account number from DB
add_filter('wp_authenticate_user','check_account_number', 10, 2);
function check_account_number($user, $password) {
    $return_value = $user;
    $account_number = ( isset( $_POST['account_number'] ) ) ? $_POST['account_number'] : '';
    if(empty($account_number)) {
        $return_value = new WP_Error( 'empty_account_number', 'Please enter account number.' );
    }

    //stop user from logging in if its account number is incorrect
    $account_number_db = get_user_meta($user->ID, 'lidnummer', true);
    if($account_number_db != $account_number) {
        $return_value = new WP_Error( 'invalid_account', 'Please enter your correct account number.' );
    }

    return $return_value;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...