Зачем менять логин на email для входа в WooCommerce
По умолчанию WordPress и WooCommerce используют логин пользователя для авторизации, что неудобно для многих клиентов. Часто пользователи забывают точный логин, но помнят email. Изменение входа на email упрощает процесс, снижая количество запросов в техподдержку и повышая конверсию в регистрации и заказах.
Диагностика проблемы с авторизацией по логину
Если пользователи жалуются, что не могут войти, хотя пароль верный, причиной может быть сложный или забытый логин, либо дублирование логинов. Проверка:
- Попросите пользователя попробовать вход по email;
- Проверьте, что в базе данных у пользователя указан email;
- Проверьте, что WooCommerce и WordPress обновлены до актуальных версий.
Пошаговое решение: авторизация по email вместо логина
1. Добавляем фильтр для входа по email
В файл functions.php вашей темы или в плагин для кастомных функций добавьте следующий код:
add_filter('authenticate', 'wp_authenticate_email_login', 20, 3);
function wp_authenticate_email_login($user, $username, $password) {
if (is_email($username)) {
$user_data = get_user_by('email', $username);
if ($user_data) {
$username = $user_data->user_login;
} else {
return new WP_Error('invalid_email', __('Неверный email адрес.'));
}
}
return wp_authenticate_username_password(null, $username, $password);
}2. Обновляем форму входа WooCommerce
Если хотите, чтобы в форме входа вместо поля «Имя пользователя» отображался email, можно переопределить шаблон WooCommerce. В папке темы создайте woocommerce/myaccount/form-login.php и замените поле логина на email:
<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
<label for="username">Email адрес <span class="required">*</span></label>
<input type="email" class="woocommerce-Input woocommerce-Input--text input-text" name="username" id="username" autocomplete="email" value="<?php echo ( ! empty( $_POST['username'] ) ) ? esc_attr( wp_unslash( $_POST['username'] ) ) : ''; ?>" />
</p>Проверка результата после внедрения
- Очистите кэш сайта и браузера;
- Попробуйте войти на сайт под существующим пользователем, введя email в поле логина;
- Проверьте, что вход происходит корректно и нет ошибок;
- Проверьте, что вход через логин также не нарушен (если хотите сохранить оба варианта), иначе ограничьте проверку только для email.
Частые ошибки и как их исправить
- Ошибка: "Неверный email адрес" даже при верном email. Проверьте, что email действительно есть в базе пользователей и не опечатан в форме.
- Авторизация не работает, если вводить логин. Если вы хотите поддерживать вход по логину и email, нужно расширить код, чтобы не блокировать логин.
- Проблемы с плагинами безопасности или кэширования. Иногда они могут блокировать нестандартную авторизацию. Отключите плагины поочередно для диагностики.
Практические советы по безопасности и производительности
- Используйте SSL (https) для защиты передачи email и пароля при входе;
- Не меняйте стандартные роли пользователей, чтобы избежать конфликтов с плагинами WooCommerce;
- Проверяйте совместимость с плагинами двухфакторной аутентификации и капча;
- Если у вас большой магазин, кэшируйте страницы, но исключайте страницы входа и личного кабинета;
- Регулярно обновляйте WordPress, WooCommerce и используемые плагины.
Сравнение вариантов реализации авторизации по email
| Метод | Плюсы | Минусы | Пример кода/плагина |
|---|---|---|---|
Фильтр authenticate (код) |
Полный контроль, легковесное решение | Требуется правка кода, требует поддержки при обновлениях | Код из статьи |
| Плагин "Login with Email" | Быстрая установка, поддержка разработчика | Дополнитель нагрузка, возможна несовместимость | WP Email Login |
| Использование плагина безопасности с функцией логина по email | Дополнитель функции безопасности | Сложнее настроить, может конфликтовать с WooCommerce | Например, Wordfence, iThemes Security |