it-swarm.com.de

E-Mail als Benutzername bei der Registrierung

viele Benutzer würden die Registrierung auf einer wp-Site ohne einen Benutzernamen zulassen, nur mit einer E-Mail.

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

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

  1. deine E-Mail
  2. wiederholen Sie Ihre E-Mail

Dies ist ein Trick, denn für wp sind die echten Felder: 1. Benutzername (als Ihre E-Mail-Adresse) 2. Ihre E-Mail-Adresse (als Wiederholung Ihrer E-Mail-Adresse)

Es gibt aber noch ein anderes Problem: Ist das @ (at) ein zulässiges Zeichen für den Benutzernamen?

Wie können wir das machen?

Sollen wir einen Code in die Datei functions.php einfügen?

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;
}

Danke im Voraus!

3
ste_yeu

Sie können @ und . in Benutzernamen verwenden, sodass es kein Problem gibt. Nun können Sie Ihr eigenes Registrierungsformular erstellen und register_new_user() verwenden. Sie können sogar wp_registration_url() mit dem Filter register_url manipulieren, sodass der Link zum Registrieren auf Ihre neue Registrierungsseite verweist.

Wenn Sie es mit der Standardschnittstelle verwenden möchten, die von wp-login.php bereitgestellt wird, benötigen Sie einige Problemumgehungen. Nehmen wir an, Sie möchten nur das E-Mail-Eingabefeld für die Registrierung anzeigen. Sie können das Feld für den Benutzernamen einfach (naja, es ist ein bisschen verrückt) folgendermaßen ausblenden:

add_action( 'register_form', function() {
    ?><style>#registerform > p:first-child{display:none;}</style><?php
} );

Anmerkung: Es besteht auch die Möglichkeit, Stylesheets mit der Aktion login_enqueue_scripts in die Datei wp-login.php einzureihen.

Wenn Sie dies jedoch tun, senden Sie einen leeren Benutzernamen, sodass Sie zwei Filter verwenden müssen: 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 validiert, aber auch hier wird der leere Benutzername verwendet, so dass wir auch diesen abfangen müssen.

Aber ich denke, eine eigene Form zu kreieren wäre vorzuziehen und weniger hackig.

3
websupporter

Folgendes habe ich verwendet:

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.

2
squarecandy

Fügen Sie dies in functions.php (oder einer anderen PHP-Datei) hinzu:

add_action('login_footer', function() {
?><script type="text/javascript">
    document.querySelector('input#user_login').parentElement.hidden = true ;
    document.querySelector('input#user_email').onchange = function(){
        document.querySelector('input#user_login').value = this.value ;
    } ;
</script><?php
} );

Die Aktion druckt das Skript in der wp-login.php "Fußzeile". Das Javascript verbirgt das Label "user_login" und die Eingabe und setzt seinen Wert mit dem E-Mail-Eingabewert.

1
Fred Autier