По-умолчанию, WordPress назначает уникальные имена пользователей для всех пользователей, зарегистрированных на сайте. В виду того, что имена уникальны, существует вероятность того, что логин, который пользователь захочет использовать, будет уже занят, и ему придется выбрать себе другой логин, который он может и не запомнить. Если он не запомнит свое имя пользователя, то ему будет сложно залогиниться в систему. Сегодняшний сниппет поможет вам настроить вход в админку для пользователей по их email, привязанному к аккаунту.
Мы будем использовать действие wp_authenticate, которое выполняет прежде, чем WordPress аутентифицирует пользователя, и здесь мы сможем изменить имя пользователя и пароль, отправленный пользователем.
Внутри этой функции, когда мы возьмем $username (имя пользователя, отправленное нам формой логина), мы затем обработаем это значение и выполним поиск email пользователя. Если вернется пользователь как объект, мы подменим логин на имя пользователя из найденного объекта пользователя.
add_action( 'wp_authenticate', 'email_address_login' ); function email_address_login( &$username, &$password ) { $user = get_user_by( 'email', $username ); if( !empty( $user->user_login ) ) { $username = $user->user_login; } }
Важно отметить, что это срабатывает по-другому с другими WordPress действиями путем отправки параметров в качестве ссылки. Что означает, что это действие лучше сработает в коде ядра в виде фильтра, так как оно требует передачи параметров, изменения значений и их возврата.
Так как это — действие, оно обрабатывает параметры, определенные амперсандом в списке параметров функций. Это означает, что вам не нужно возвращать какие-либо значения из этой функции, а просто нужно изменить значения переменных и они автоматически будут возвращены функцией.
Вы можете посмотреть, как это работает в WordPress, заглянув в код ядра в месте выполнения wp_authenticate.
Внутри файла /wp-includes/user.php в строке 54 вы увидите следующий код:
do_action_ref_array( 'wp_authenticate', array( &$credentials['user_login'], &$credentials['user_password'] ) );
Обычно, когда вызывается действие, оно использует функцию do_action(), однако наше — использует функцию do_action_ref_array() и обрабатывает значения в качестве ссылки.
Мы надеемся, что эта статья помогла вам настроить для ваших пользователей возможность входа на сайт WordPress по email адресу.
По всем вопросам и отзывам просьба писать в комментарии ниже.
Не забывайте, по возможности, оценивать понравившиеся записи количеством звездочек на ваше усмотрение.