После поиска в течение нескольких дней и прочтения двухлетних тем у меня возникли проблемы с поиском решения проблемы, когда пользователи заходят только по электронной почте.
Сначала я был рад видеть WP_Email_Login только для того, чтобы узнать, что вы все еще можете использовать свое имя пользователя для входа в систему. Я не уверен, как идти о написании этого в качестве плагина. Моя идея - переопределить функцию register_new_user. Я не видел этого в списке «подключаемых» функций. Могу ли я использовать фильтры / действия для достижения этой цели?
Я понимаю, что редактировать основные файлы не модно, поэтому я надеюсь, что решение есть, но если его не будет, я рискну. В первой строке функции «register_new_user» в wp-login.php я могу добавить:
$nickname_variable(??) = $user_login // set the nickname to the username
$user_login = $user_email; // set the user_login/username to the email address
Это работает довольно хорошо, так как WordPress не позволяет людям менять свое имя пользователя. На экране регистрации (форма) он запрашивает имя пользователя и адрес электронной почты; Я хотел бы установить для имени пользователя переменную Nickname (если кто-то может сказать мне, как называется переменная псевдонима или где она установлена во время регистрации, это будет полезно).
Ура,
кузнец
Ответы:
Обновление: я создал плагин для входа в систему, регистрации и восстановления пароля по электронной почте. https://wordpress.org/plugins/smart-wp-login/
Ответ вкратце, вы можете настроить WordPress для входа по электронной почте.
Три шага:
Одна нота:
Удалите функцию аутентификации WordPress по умолчанию.
WordPress использует фильтр « authenticate » для дополнительной проверки при входе пользователя в систему.
Добавить пользовательскую функцию аутентификации
Измените текст «Имя пользователя» в wp-login.php на «Электронная почта»
Мы можем использовать фильтр gettext, чтобы изменить текст «Имя пользователя» на «Электронная почта» без редактирования основных файлов.
Я также написал подробную статью в своем блоге http://www.thebinary.in/blog/wordpress-login-using-email/
источник
Это возможно, вы должны изменить фильтр для имени.
Альтернативой является плагин, который вы найдете через Google oder в репозитории плагинов; может быть, этот плагин .
источник
Используя приведенный выше код:
Все, что нам нужно было сделать, это проверить, что предоставленное имя пользователя, по крайней мере, выглядит как электронное письмо, а если не саботировать имя пользователя.
источник
'@'
в имени пользователя, Wordpress имеет удобную встроенную функцию: sanitize_email вернет либо действительный формат адреса электронной почты, либо ничего:sanitize_email('email¬!"@business_com'); // Returns nothing
это уже в
WP-CORE
!Теперь WordPress уже позволяет зарегистрировать EMAIL как имя пользователя. но если вы говорите об уже зарегистрированных пользователях, попробуйте перечисленные ответы.
источник
Небольшие изменения в приведенном выше коде - это все, что нужно для создания элегантного решения. В документации для хука проверки подлинности говорится, что либо
WP_User
объект, либоWP_Error
объект должны быть возвращены.Исходный код для wp_authenticate_username_password функции пробегает несколько довольно простых проверок; мы можем просто воспроизвести способ проверки и создать новый
WP_Error
объект для работы с адресом электронной почты. В качестве альтернативы, мы могли бы даже поднятьwp_authenticate_username_password
код и изменить его, если бы захотели, хотя это кажется ненужным, если вы действительно не хотите настраивать, как все работает. Код ниже должен помочь: (Хотя я сам не проверял ...)источник
Для этого есть плагин:
Принудительно Войти по электронной почте
https://br.wordpress.org/plugins/force-email-login/
Это также на Github: https://github.com/miya0001/force-email-login
источник