Используем 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, то он наткнется на сообщение об ошибке.

Миша Рудрастых Разработчик WordPress WooCommerce

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

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.

Смотрите также