Здравствуйте, иногда пользователи забывают свои логины (имя пользователя) – было бы хорошо разрешить им входить в админку через email вместо логина, в данной статье мы рассмотрим плагин для решения данного вопроса, а также КОД (хук), который позволит заменить данный плагин или расширить его функции.
Скачать исходники для статьи можно ниже
1. Плагин WP Email Login
Сведения о плагине:
Загрузок: 82,015
Последнее обновление: 2014-12-10
Сайт плагина: “wordpress.org/plugins/wp-email-login/”
Плагин переведен на русский язык.
Настроек у плагин нет – установить, активировать – и плагин работает.
После установки плагина пользователи смогут заходить на сайт в админку, используя как логин, так и email:
2. Код (хук), который позволяет не использовать плагин.
Заходим в админку wordpress, в левом меню выбираем пункт “Внешний вид” и его подпункт “Редактор”, справа в списке шаблонов выбираем файл – functions.php и вставляем в него (в самый низ) следующий код:
//remove wordpress authentication
remove_filter('authenticate', 'wp_authenticate_username_password', 20);
add_filter('authenticate', function($user, $email, $password){
//Check for empty fields
if(empty($email) || empty ($password)){
//create new error object and add errors to it.
$error = new WP_Error();
if(empty($email)){ //No email
$error->add('empty_username', __('<strong>ERROR</strong>: Email field is empty.'));
}
else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ //Invalid Email
$error->add('invalid_username', __('<strong>ERROR</strong>: Email is invalid.'));
}
if(empty($password)){ //No password
$error->add('empty_password', __('<strong>ERROR</strong>: Password field is empty.'));
}
return $error;
}
//Check if user exists in WordPress database
$user = get_user_by('email', $email);
//bad email
if(!$user){
$error = new WP_Error();
$error->add('invalid', __('<strong>ERROR</strong>: Either the email or password you entered is invalid.'));
return $error;
}
else{ //check password
if(!wp_check_password($password, $user->user_pass, $user->ID)){ //bad password
$error = new WP_Error();
$error->add('invalid', __('<strong>ERROR</strong>: Either the email or password you entered is invalid.'));
return $error;
}else{
return $user; //passed
}
}
}, 20, 3);
Здесь соответственно можно поменять сообщения об ошибках на английском языке – на русский:
– ERROR: Email field is empty.
– ERROR: Email is invalid.
– ERROR: Password field is empty.
– ERROR: Either the email or password you entered is invalid.
После этого страница входа будет выглядеть так:
Хотя на странице входа написано ввести “Имя пользователя”, однако, после нашего кода – войти можно только по email, вот что будет написано если воспользоваться логином:
Можно воспользоваться данным код в целях безопасности…
Но мы создаем данную форму для удобства пользователей, поэтому нам нужно заменить в форме входа “Имя пользователя” на “Email”, а для этого нам нужно вставить в файл functions.php еще немного кода:
function username_or_email_login() {
if ( 'wp-login.php' != basename( $_SERVER['SCRIPT_NAME'] ) )
return;
?><script type="text/javascript">
// Form Label
if ( document.getElementById('loginform') )
document.getElementById('loginform').childNodes[1].childNodes[1].childNodes[0].nodeValue = '<?php echo esc_js( __( 'Email', 'email-login' ) ); ?>';
// Error Messages
if ( document.getElementById('login_error') )
document.getElementById('login_error').innerHTML = document.getElementById('login_error').innerHTML.replace( '<?php echo esc_js( __( 'username' ) ); ?>', '<?php echo esc_js( __( 'Email' , 'email-login' ) ); ?>' );
</script><?php
}
add_action( 'login_form', 'username_or_email_login' );
После чего наша страница входа в админку wordpress будет уже выглядеть так:
На этом все, удачи!

