Czy można usunąć pole nazwy użytkownika ze strony rejestracji?
Chcę, aby użytkownicy wprowadzali tylko swój adres e-mail i hasło.
Nowy użytkownik powinien zostać utworzony wyłącznie na podstawie tych dwóch parametrów.
Czy to możliwe, a jeśli tak, to w jaki sposób?
user-registration
phpnwordpress
źródło
źródło
Odpowiedzi:
Absolutnie TAK , możesz to osiągnąć.
Zasada 1: WordPress wymaga nazwy użytkownika. Musimy podać nazwę użytkownika.
Zasada 2: Nie edytuj kodu podstawowego WordPress.
Możemy to osiągnąć, ukrywając pole nazwy użytkownika, otrzymując e-mail i przechowując go jako nazwę użytkownika.
Krok 1: Usuń pole tekstowe Nazwa użytkownika
Krok 2: Błąd usuwania nazwy użytkownika
Krok 3: Zmodyfikuj funkcjonalność rejestracji w tle.
Umieść powyższy kod w pliku functions.php swojego motywu .
Możesz również pobrać kompletną wtyczkę, aby to osiągnąć.
Wtyczka: https://wordpress.org/plugins/smart-wp-login/
źródło
Krok 3 w poście postu Nishant Kumars sprawdza, czy
isset($_POST['user_login'])
to nie zadziałało, ponieważ logowanie jest tym, co naprawdę chcemy usunąć.Moje rozwiązanie jest następujące (w funkcji theme.php), również jako osobna funkcja, aby pozostać przy stylu kodu wordpress:
źródło
@
.
$_POST['user_login'] = str_replace(array('@', '.'), '_', $_POST['user_email']);
@Nishant Kumar udzielił idealnej i należy ją zaakceptować odpowiedzi na to pytanie. Jednak po wydaniu wersji Wordpress 4.0 występuje usterka. Z kodeksu -
registration_errors
filtr tutaj wymaga niewielkiej modyfikacji.Uwaga: Jak wspomniałem @mcnesium, jeśli całkowicie pozbyliśmy się pola nazwy użytkownika (w moim przypadku użyłem Theme mojej wtyczki logowania, aby zastąpić zwykły formularz rejestracyjny i tam właśnie usunąłem pole nazwy użytkownika), to
$_POST['user_login']
będzienull
i warunek nie będzie zgodny w ogóle. Lepiej usuńmy to ze stanu sugerowanego przez @mcnesium.źródło
Iterując w odpowiedzi na @ nishant-kumar, oto waniliowy JS, bez dodatkowego skryptu js, 1 krok, nie wymaga edycji backendu, rozwiązanie do utworzenia formularza rejestracyjnego przy użyciu tylko e-maila:
Musisz tylko dodać ten kod do pliku functions.php (lub do niestandardowej wtyczki , jeśli ją masz)
źródło
user_email is not defined at HTMLInputElement.syncUserName
. Przeniesienie części „function syncUserName” wewnątrz górnej funkcji usuwa błąd i fragment kodu działa bardzo dobrze. Po prostu komentuj, aby inni mogli napotkać ten sam problem. Dziękuję Gfra54.user_email
var w tym samym zakresie. Dzięki.Myślę, że każde rozwiązanie tego żądania będzie „hackowaniem”, ponieważ wordpress wymaga podania nazwy użytkownika dla wszystkich zarejestrowanych użytkowników. Nawet wspomniana wyżej wtyczka najprawdopodobniej po prostu znajduje nazwę użytkownika za pomocą adresu e-mail, a następnie używa tej nazwy użytkownika do zalogowania się na stronie.
Jeśli nie masz nic przeciwko hackowi, oto koncepcja, która może działać:
1) Wypełnij wstępnie pole nazwy użytkownika w formularzu rejestracyjnym unikalnym numerem, używając aktualnego znacznika czasu to dobry pomysł, aby uniknąć uzyskiwania duplikatów. Następnie ukryłbyś to pole, aby użytkownik nie widział go na ekranie podczas wypełniania formularza.
Jeśli używasz jQuery, możesz użyć czegoś takiego:
W tym przykładzie „formularz input.username” byłby selektorem jQuery, aby znaleźć pole nazwy użytkownika, musisz sprawdzić strukturę HTML na swojej stronie, aby upewnić się, że selektor pasuje do struktury.
2) Użyj wtyczki takiej jak wspomniana wcześniej ( http://wordpress.org/extend/plugins/wp-email-login/ ), aby umożliwić użytkownikom logowanie się przy użyciu adresu e-mail.
źródło