Используем e-mail вместо имени пользователя для входа на сайт

Во-первых, я хочу извиниться, что почти три недели (!) ничего не писал на блоге, просто сейчас очень много дел навалилось, обещаю, что вскоре снова начну публиковать посты регулярно.

А теперь к делу. Приведу в пример сайт deviantart.com, взгляните на их форму входа пользователей. Как видите, они предлагают ввести либо логин либо e-mail, прикольно.

Реализовать это на WorPress на самом деле проще простого, достаточно вставить этот кусок кода в fucntions.php текущей темы.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// удаляем стандартный фильтр
remove_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 );
 
// и добавляем собственный
add_filter( 'authenticate', 'login_by_email', 20, 3 );
 
function login_by_email( $user, $username, $password ) {
    // если введен логин, то сразу авторизуем, минуя лишние запросы
    if ( is_email( $username ) ) {
        // получаем ID пользователя 
        if ( ! empty( $username ) )
            $user = get_user_by( 'email', $username );
 
        // подбираем соответствующее емейлу имя пользователя (логин)
        if ( isset( $user->user_login, $user ) )
            $username = $user->user_login;
 
    }
    return wp_authenticate_username_password( NULL, $username, $password );
}

Теперь смотрите, код выше позволяет пользователям входить на сайт вписывая и логин и e-mail. А что если дать им возможность входа только при помощи e-mail, а при помощи имени пользователя — запретить?

Немного видоизменяем функцию:

7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function login_by_email( $user, $username, $password ) {
    // если введен логин, то отправляем лесом
    if ( !is_email( $username ) ) 
        return;
 
    // получаем ID пользователя 
    if ( ! empty( $username ) )
        $user = get_user_by( 'email', $username );
 
    // подбираем соответствующее емейлу имя пользователя (логин)
    if ( isset( $user->user_login, $user ) )
        $username = $user->user_login;
 
    return wp_authenticate_username_password( NULL, $username, $password );
}

Теперь, если какой-нибудь чувак захочет войти и при этом введет имя пользователя, а не email, то он наткнется на сообщение об ошибке.

Источник: misha.blog

Миша Рудрастых

Путешествует по миру и рассказывает всем о WordPress лично, у себя в блогах и на курсах в Санкт-Петербурге. Умеет просто объяснять сложные вещи, делает это красиво. Организовывает неплохие WordCamp's, но совсем не умеет слушать чужие доклады.

Добавить комментарий

%d такие блоггеры, как: