Во-первых, я хочу извиниться, что почти три недели (!) ничего не писал на блоге, просто сейчас очень много дел навалилось, обещаю, что вскоре снова начну публиковать посты регулярно.
А теперь к делу. Приведу в пример сайт deviantart.com, взгляните на их форму входа пользователей. Как видите, они предлагают ввести либо логин либо e-mail, прикольно.
Реализовать это на WorPress на самом деле проще простого, достаточно вставить этот кусок кода в fucntions.php текущей темы.
// удаляем стандартный фильтр 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, а при помощи имени пользователя — запретить?
Немного видоизменяем функцию:
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, то он наткнется на сообщение об ошибке.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Очень полезно. Спасибо. А при регистрации, в таком случае, нужно указывать только E-mail?
Посчет формы регистрации есть несколько вариантов, либо рандомно генерировать логин, либо в логин автоматически вставлять e-mail, а для пользователей просто скрыть это поле)
также можно немного подкорректировать саму страницу входа WordPress (если ею пользуются посетители).
увы, тут хуков не предусмотрено, поэтому придется колдовать на JavaScript:
1. поменяем лейбл
2. поменяем сообщения об ошибках
Я думаю что если для того что бы войти на сайт нужна регистрация. То я туда входить - не буду. Сайтов очень много, более того автору сайта нужно постораться в двух случаях:
1) что бы я пришёл на его сайт
2) что бы я туда приходил снова
на мой взгляд, чем меньше барьеров, тем удобнее для пользователей.
ну люди же регистрируются))
Супер) Простое и действительно полезное дополнение.
Правда нужно сменить текст с просто "Имя пользователя" на "Имя пользователя или E-mail", может так:
Правда и на странице регистрации меняется текст(
попробуй на скриптах)) вот так:
Не прокатывает если регистрация и авторизация проходит через сторонний плагин.
Наример через Profile Builder.
Там тупо другие фильры.
Может кто нашел решение для этого плагина. Купил Про версию а тут такой облом =\
ну да, разумеется для каждого плагина - свое собственное индивидуальное решение будет
В самое начало можно установить проверку почты, чтобы не делать лишних запросов, если там логин введен:
согласен,
спасибо за подсказку по оптимизации кода,
неплохо бы мне как-нибудь пробежаться по всем старым постам, вот только где найти время)
Помогите пожалуйста с задачей. Проблема глобальная, на много-пользовательских блогах. К примеру, узнать чей-то логин, пустяковое дело, более того, многие блоги ссылаются на профиль "/author/admin"
и если я в форме восстановления пароля введу логин пользователя то на его мыло придет письмо. Так можно спамить ящики пользователей зная лишь логин. Это конечно не проблема, но всё таки явный недочет.
Как решить эту задачу используя пример выше, но только для формі восстановления пароля?
разве? насколько я знаю, можно узнать логин через CSS в комментариях, о том, как исправить, я писал в этой статье.
а чего именно вы хотите добиться? сделать восстановление пароля по email, я правильно вас понимаю?
Да именно так, по имейл