Здравствуйте, иногда пользователи забывают свои логины (имя пользователя) – было бы хорошо разрешить им входить в админку через 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 будет уже выглядеть так:
На этом все, удачи!