E-Mail als Benutzername in der Registrierung

Viele Benutzer würden die Registrierung in einer Wp-Site ohne einen Benutzernamen zulassen, nur mit einer E-Mail.

Dies ist ein coreproblem, daher besteht die Lösung (ein Trick) darin, den Benutzernamen durch E-Mail zu ersetzen.

Wenn wp einen Benutzernamen und eine E-Mail für die Registrierung benötigt, können wir den E-Mail-Wert abrufen und in den Wert des Benutzernamens eingeben. Im Anmeldeformular sehen Benutzer zwei Felder:

  1. deine E-Mail
  2. Wiederhole deine E-Mail

Dies ist ein Trick, denn für wp werden die echten Felder lauten: 1. Benutzername (als deine E-Mail) 2. deine E-Mail (als Wiederholung deiner E-Mail)

Aber es gibt ein anderes Problem: Ist das @ (at) ein erlaubtes Zeichen für den Benutzernamen?

Wie können wir das tun?

Sollten wir einen Code in die functions.php Datei einfügen? .. etwas in der Art:

add_action( 'wp_core_validate_user_signup', 'custom_validate_user_signup' ); function custom_validate_user_signup($result) { unset($result['errors']->errors['user_name']); if(!empty($result['user_email']) && empty($result['errors']->errors['user_email'])) { $result['user_name'] = md5($result['user_email']); $_POST['signup_username'] = $result['user_name']; } return $result; } 

Vielen Dank im Voraus!

Solutions Collecting From Web of "E-Mail als Benutzername in der Registrierung"

Sie können @ und verwenden . in Benutzernamen, so gibt es kein Problem. Jetzt könnten Sie Ihr eigenes Registrierungsformular erstellen und register_new_user() . Sie könnten wp_registration_url() mit dem Filter register_url manipulieren, sodass der Registerlink auf Ihre neue Registerseite zeigt.

Wenn Sie es mit der Standardschnittstelle von wp-login.php verwenden möchten, benötigen Sie einige Umgehungslösungen. Nehmen wir an, Sie möchten nur das E-Mail-Eingabefeld für die Registrierung anzeigen, Sie könnten einfach (naja, es ist ein bisschen hacky) das Feld “Benutzername” mit etwas wie diesem ausblenden:

 add_action( 'register_form', function() { ?>< ?php } ); 

Hinweis: Es gibt auch die Möglichkeit, Stylesheets mit der Aktion login_enqueue_scripts in die wp-login.php login_enqueue_scripts .

Aber wenn Sie dies tun, werden Sie einen leeren Benutzernamen senden, also müssen Sie in zwei Filter sanitize_user : sanitize_user und validate_username .

 add_filter( 'sanitize_user', function( $sanitized_user, $raw_user, $strict ) { if ( $raw_user != '' ) { return $sanitized_user; } if ( ! empty ( $_REQUEST['action'] ) && $_REQUEST['action'] === 'register' && is_email( $_POST['user_email'] ) ) { return $_POST['user_email']; } return $sanitized_user; }, 10, 3 ); add_filter( 'validate_username', function( $valid, $username ) { if ( $valid ) { return $valid; } if ( ! empty ( $_REQUEST['action'] ) && $_REQUEST['action'] === 'register' && is_email( $_POST['user_email'] ) ) { return true; } return is_email( $username ); }, 10, 2 ); 

In sanitize_user ersetzen wir die leere Zeichenfolge durch die E-Mail-Adresse. Später wird der Benutzername mit validate_username validate_username , aber wieder wird der leere Benutzername verwendet, also müssen wir das auch abfangen.

Aber ich denke, eine eigene Form zu erstellen wäre bevorzugt und weniger hacky.

Folgendes habe ich benutzt:

 jQuery(document).ready(function($){ // hide the username field. $('input#user_login').parent().parent().hide(); // force username to mirror the input of the email field $('input#email').on('change',function(){ $('#user_login').val($(this).val()); }); }); 

Schön und einfach.