Во-первых, я хочу извиниться, что почти три недели (!) ничего не писал на блоге, просто сейчас очень много дел навалилось, обещаю, что вскоре снова начну публиковать посты регулярно.
А теперь к делу. Приведу в пример сайт 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, то он наткнется на сообщение об ошибке.