wake-up-neo.net

Ist es möglich, das Benutzername-Feld von der Registrierungsseite zu entfernen? Wenn das so ist, wie?

Ist es möglich, das Feld für den Benutzernamen von der Registrierungsseite zu entfernen?

Ich möchte, dass die Benutzer nur ihre E-Mail-Adresse und ihr Passwort eingeben.
Ein neuer Benutzer sollte nur anhand dieser beiden Parameter erstellt werden.

Ist das möglich und wenn ja, wie?

15
phpnwordpress

Absolut YES, das können Sie erreichen.

Regel 1: Für WordPress ist ein Benutzername erforderlich. Wir müssen einen Benutzernamen angeben.

Regel 2: Bearbeite nicht den WordPress-Kerncode.

Wir können dies erreichen, indem wir das Feld "Benutzername" verbergen, eine E-Mail erhalten und es als Benutzername speichern.

Schritt-1: Entfernen Sie das Textfeld Benutzername

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

    <script type="text/javascript" src="<?php echo site_url('/wp-includes/js/jquery/jquery.js'); ?>"></script>
    <script type="text/javascript">
        jQuery(document).ready(function($){
            $('#registerform > p:first-child').css('display', 'none');
        });
    </script>
<?php
});

Schritt-2: Entfernen des Benutzernamens

//Remove error for username, only show error for email only.
add_filter('registration_errors', function($wp_error, $sanitized_user_login, $user_email){
    if(isset($wp_error->errors['empty_username'])){
        unset($wp_error->errors['empty_username']);
    }

    if(isset($wp_error->errors['username_exists'])){
        unset($wp_error->errors['username_exists']);
    }
    return $wp_error;
}, 10, 3);

Schritt-3: Hintergrundregistrierungsfunktionalität manipulieren.

add_action('login_form_register', function(){
    if(isset($_POST['user_login']) && isset($_POST['user_email']) && !empty($_POST['user_email'])){
        $_POST['user_login'] = $_POST['user_email'];
    }
});

Fügen Sie den obigen Code in die Datei functions.php Ihres Themas ein.

Sie können auch ein komplettes Plugin herunterladen, um dies zu erreichen.

Plugin: https://wordpress.org/plugins/smart-wp-login/

11
Nishant Kumar

Schritt 3 im Beitrag von Nishant Kumars überprüft, ob isset($_POST['user_login']) bei mir nicht funktioniert hat, da das Login das ist, was wir eigentlich entfernen möchten.

Meine Lösung lautet wie folgt (in der Datei functions.php des Themas), auch als separate Funktion, um beim WordPress-Codestil zu bleiben:

function copy_username_to_email (){
    if(isset($_POST['user_email']) && !empty($_POST['user_email'])){
        $_POST['user_login'] = $_POST['user_email'];
    }
}
add_action('login_form_register', 'copy_username_to_email');
4
mcnesium

@Nishant Kumar gab die perfekte und zu akzeptierende Antwort auf diese Frage. Es gibt jedoch einen Fehler nach der Veröffentlichung der Wordpress 4.0-Version. Von codex -

Hinweis: Seit 4.0 sind diese Eigenschaften privat, siehe [28511] .

registration_errors filter hier bedarf einer kleinen änderung.

//Remove error for username, only show error for email only.

add_filter('registration_errors', 'remove_username_empty_error', 10, 3);

function remove_username_empty_error($wp_error, $sanitized_user_login, $user_email){

    if(isset($wp_error->errors['empty_username'])){
        $wp_error->remove('empty_username');
    }    
    if(isset($wp_error->errors['username_exists'])){
        $wp_error->remove('username_exists');
    }
    return $wp_error;
}

Hinweis: Wie bei @mciterranean erwähnt, wenn wir das Benutzername-Feld vollständig entfernt haben (in meinem Fall habe ich mit Theme mein Login-Plugin verwendet, um das reguläre Registrierungsformular zu überschreiben, und dort habe ich gerade das Benutzername-Feld entfernt), wird $_POST['user_login'] Seien Sie null und Bedingung stimmt überhaupt nicht überein. Wir sollten das besser aus dem Zustand entfernen, wie es @mciterranean vorschlägt.

4
maksbd19

Nach der Antwort von @ nishant-kumar ist hier ein Vanilla JS, kein zusätzliches JS-Skript, 1 Schritt, keine Backend-Bearbeitung erforderlich, Lösung, um ein Anmeldeformular nur mit der E-Mail-Eingabe zu erstellen:

/** Hook your code to the login / Sign up page **/
add_action('login_head', function(){

    /* Style to hide the user_name field group */
    ?>
    <style>
        #registerform > p:first-child{
            display:none;
        }
    </style>

    <script type="text/javascript">
        /* Execute this action when the DOM is ready AND after everything in the page is loaded */
        let user_email;
        window.addEventListener('load',function() {
            user_email = document.querySelector('[name="user_email"]');
            if(user_email) { // Execute only if there is a user_email field on page
                user_email.addEventListener('keyup',syncUserName);
                user_email.addEventListener('change',syncUserName);
            }
        });

        /* sync user_email's value with the hidden user_login field */
        function syncUserName() {
                document.querySelector('[name="user_login"]').value = user_email.value;
        }

    </script>
<?php
});

Sie müssen nur diesen Code in Ihre functions.php Datei einfügen (oder in Ihr benutzerdefiniertes Plugin , falls Sie eines haben)

2
Gfra54

Ich denke, dass jede Lösung für diese Anfrage ein "Hack" sein wird, da WordPress erfordert, dass es einen Benutzernamen für alle registrierten Benutzer gibt. Selbst das oben erwähnte Plugin findet höchstwahrscheinlich nur den Benutzernamen über die E-Mail-Adresse und verwendet diesen Benutzernamen, um sich auf der Site anzumelden.

Wenn Sie mit einem Hack einverstanden sind, ist hier ein Konzept, das funktionieren könnte:

1) Füllen Sie das Feld für den Benutzernamen in Ihrem Registrierungsformular mit einer eindeutigen Nummer aus. Die Verwendung des aktuellen Zeitstempels ist eine gute Idee, um zu vermeiden, dass jemals Duplikate erstellt werden. Sie würden dieses Feld dann ausblenden, damit der Benutzer es beim Ausfüllen seines Formulars nicht auf dem Bildschirm sieht.

Wenn Sie jQuery verwenden, können Sie Folgendes verwenden:

$(document).ready(function() {
    var timestamp = (new Date).getTime();
    $('form input.username').val(timestamp);
    $('form input.username').css('display', 'none');
});

In diesem Beispiel wäre 'form input.username' der jQuery-Selektor, um das Feld username zu finden. Sie müssen die HTML-Struktur auf Ihrer Seite überprüfen, um sicherzustellen, dass der Selektor mit der Struktur übereinstimmt.

2) Verwenden Sie ein Plugin wie das zuvor erwähnte ( http://wordpress.org/extend/plugins/wp-email-login/ ), damit sich Benutzer mit ihrer E-Mail-Adresse anmelden können.

1
Matt Keys