È possibile rimuovere il campo nome utente dalla pagina di registrazione? Se é cosi, come?


Risposte:


11

Assolutamente , puoi raggiungerlo.

Regola 1: WordPress richiede un nome utente. Dobbiamo fornire un nome utente.

Regola 2: non modificare il codice principale di WordPress.

Possiamo raggiungere questo obiettivo nascondendo il campo nome utente, ricevendo e-mail e memorizzandolo come nome utente.

Passaggio 1: rimuovere il campo di testo Nome utente

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

Passaggio 2: rimuovere l'errore nome utente

//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);

Passaggio 3: manipolazione della funzionalità di registrazione in background.

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'];
    }
});

Mettere sopra il codice nel vostro tema del functions.php file.

È inoltre possibile scaricare un plug-in completo per raggiungere questo obiettivo.

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


4

Il passaggio 3 nel post di Nishant Kumars controlla se isset($_POST['user_login'])questo non ha funzionato per me, poiché il login è ciò che vogliamo effettivamente rimuovere.

La mia soluzione è la seguente (nelle funzioni.php del tema), anche come funzione separata, per rimanere con lo stile del codice wordpress:

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');

Stavo ricevendo un messaggio di errore "Personaggi illegali", quindi ho sostituito l'indirizzo @e .e-mail come nome utente:$_POST['user_login'] = str_replace(array('@', '.'), '_', $_POST['user_email']);
GreatBlakes

4

@Nishant Kumar ha dato la risposta perfetta e che dovrebbe essere accettata a questa domanda. Tuttavia, c'è un problema tecnico dopo la versione di Wordpress 4.0 rilasciata. Dal codice -

Nota: dalla 4.0, queste proprietà sono private, vedere [28511] .

registration_errors il filtro qui richiede una piccola modifica.

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

Nota: come menzionato @mcnesium, se ci liberassimo completamente del campo del nome utente (nel mio caso ho usato il tema il mio plugin di accesso per sovrascrivere il normale modulo di registrazione e lì ho appena rimosso il campo del nome utente), quindi $_POST['user_login']lo sarà nulle la condizione non corrisponderà affatto. È meglio rimuoverlo dalla condizione suggerita da @mcnesium.


2

Iterando sulla risposta di @ nishant-kumar, ecco un JS vaniglia, nessuno script js extra, 1 passaggio, nessuna modifica del backend necessaria, soluzione per creare un modulo di iscrizione con solo l'input e-mail:

/** 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
});

Hai solo bisogno di aggiungere questo codice nel tuo functions.php di file (o nel vostro plugin personalizzato , se ne avete uno)


1
Ho provato questo e ho ricevuto un errore user_email is not defined at HTMLInputElement.syncUserName. Lo spostamento della parte "function syncUserName" all'interno della funzione superiore rimuove l'errore e lo snippet di codice funziona notevolmente. Basta commentare in modo che altri possano riscontrare lo stesso problema. Grazie Gfra54.
Betty

Hai assolutamente ragione @betty, ho corretto la mia risposta per mettere il user_emailvar nello stesso ambito. Grazie.
Gfra54,

1

Penso che qualsiasi soluzione a questa richiesta sarà un 'hack' in quanto wordpress richiede che ci sia un nome utente per tutti gli utenti registrati. Anche il plugin sopra menzionato è molto probabilmente solo trovare il nome utente tramite l'indirizzo e-mail e quindi utilizzare quel nome utente per accedere al sito.

Se stai bene con un trucco, ecco un concetto che potrebbe funzionare:

1) Pre-compilare il campo del nome utente nel modulo di registrazione con un numero univoco, utilizzando l'attuale timestamp è una buona idea per evitare di ottenere duplicati. Quindi nascondere questo campo in modo che l'utente non lo veda sullo schermo durante la compilazione del modulo.

Se stai usando jQuery potresti usare qualcosa come:

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

In questo esempio, 'form input.username' sarebbe il selettore jQuery per trovare il campo del nome utente, sarà necessario controllare la struttura html sulla pagina per assicurarsi che il selettore corrisponda alla struttura.

2) Utilizzare un plug-in come quello menzionato in precedenza ( http://wordpress.org/extend/plugins/wp-email-login/ ) per consentire agli utenti di accedere con il proprio indirizzo e-mail.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.