È possibile rimuovere il campo username dalla pagina di registrazione? Se sì, come?

16 mag 2012, 15:22:50
Visualizzazioni: 34.6K
Voti: 17

È possibile rimuovere il campo username dalla pagina di registrazione?

Voglio che gli utenti inseriscano solo email e password.
Un nuovo utente dovrebbe essere creato basandosi solo su questi due parametri.

È possibile e se sì, come?

// Aggiungi questo codice nel file functions.php del tuo tema add_action('register_form', function() { echo '<style>#user_login{display:none;}#user_email{display:block !important;}</style>'; }); add_filter('random_user_name', function($username, $email) { // Crea username dall'email rimuovendo il dominio return strstr($email, '@', true); }, 10, 2); // Imposta l'email come username se non viene fornito add_action('login_form_register', function() { if (isset($_POST['user_email']) && !isset($_POST['user_login'])) { $_POST['user_login'] = $_POST['user_email']; } });
1
Commenti

Questo funziona? http://wordpress.org/extend/plugins/wp-email-login/

saltcod saltcod
16 mag 2012 15:30:28
Tutte le risposte alla domanda 5
0
12

Assolutamente SI, puoi ottenere questo risultato.

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

Regola 2: Non modificare il codice core di WordPress.

Possiamo ottenere questo risultato nascondendo il campo nome utente, ottenendo l'email e memorizzandola come nome utente.

Passo 1: Rimuovere il campo di testo per il 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
});

Passo 2: Rimuovere l'errore per il nome utente

//Rimuove l'errore per il nome utente, mostra solo l'errore per l'email
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);

Passo 3: Manipolare la 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'];
    }
});

Inserisci il codice sopra nel file functions.php del tuo tema.

Puoi anche scaricare un plugin completo per ottenere questo risultato.

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

3 ago 2014 07:59:14
1

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

La mia soluzione è la seguente (nel file functions.php del tema), anche come funzione separata, per rimanere nello 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');
28 gen 2015 18:58:16
Commenti

Stavo ricevendo un messaggio di errore "caratteri non consentiti", quindi ho sostituito i caratteri @ e . nell'indirizzo email usato come username: $_POST['user_login'] = str_replace(array('@', '.'), '_', $_POST['user_email']);

GreatBlakes GreatBlakes
27 apr 2018 18:57:54
0

@Nishant Kumar ha fornito la risposta perfetta e che dovrebbe essere accettata per questa domanda. Tuttavia, c'è un problema dopo il rilascio della versione di WordPress 4.0. Dal codex-

Nota: Dalla versione 4.0, queste proprietà sono private, vedi [28511].

Il filtro registration_errors qui richiede una piccola modifica.

//Rimuove l'errore per il nome utente, mostra solo l'errore per l'email.

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 da @mcnesium, se eliminiamo completamente il campo del nome utente (nel mio caso ho usato il plugin Theme my login per sovrascrivere il modulo di registrazione standard e lì ho semplicemente rimosso il campo del nome utente), allora $_POST['user_login'] sarà null e la condizione non corrisponderà affatto. È meglio rimuoverlo dalla condizione come suggerito da @mcnesium.

17 apr 2015 20:41:02
2

Iterando sulla risposta di @nishant-kumar, ecco una soluzione vanilla JS, senza script JS aggiuntivi, in un solo passaggio e senza bisogno di modifiche backend, per creare un modulo di registrazione con solo il campo email:

/** Aggancia il tuo codice alla pagina di login/registrazione **/
add_action('login_head', function(){

    /* Stile per nascondere il gruppo di campi user_name */
    ?>
    <style>
        #registerform > p:first-child{
            display:none;
        }
    </style>

    <script type="text/javascript">
        /* Esegui questa azione quando il DOM è pronto E dopo che tutto nella pagina è caricato */
        let user_email;
        window.addEventListener('load',function() {
            user_email = document.querySelector('[name="user_email"]');
            if(user_email) { // Esegui solo se c'è un campo user_email nella pagina
                user_email.addEventListener('keyup',syncUserName);
                user_email.addEventListener('change',syncUserName);
            }
        });

        /* Sincronizza il valore di user_email con il campo user_login nascosto */
        function syncUserName() {
                document.querySelector('[name="user_login"]').value = user_email.value;
        }

    </script>
<?php
});

Basta aggiungere questo codice nel tuo file functions.php (o nel tuo plugin personalizzato, se ne hai uno)

19 dic 2018 09:09:15
Commenti

Ho provato questo e ho ricevuto un errore user_email is not defined at HTMLInputElement.syncUserName. Spostando la parte "function syncUserName" all'interno della funzione superiore elimina l'errore e lo snippet di codice funziona perfettamente. Commento solo in modo che altri possano incontrare lo stesso problema. Grazie Gfra54.

Betty Betty
7 mar 2019 04:34:14

Hai assolutamente ragione @betty, ho corretto la mia risposta per inserire la var user_email nello stesso scope. Grazie.

Gfra54 Gfra54
8 mar 2019 08:13:24
0

Penso che qualsiasi soluzione a questa richiesta sarà un 'hack' poiché WordPress richiede che ci sia un nome utente per tutti gli utenti registrati. Anche il plugin menzionato sopra molto probabilmente sta solo trovando il nome utente tramite l'indirizzo email e poi utilizzando quel nome utente per accedere al sito.

Se sei d'accordo con un hack, ecco un concetto che potrebbe funzionare:

1) Pre-compila il campo del nome utente nel tuo modulo di registrazione con un numero univoco, utilizzare il timestamp corrente è una buona idea per evitare di ottenere mai duplicati. Dovresti poi nascondere questo campo in modo che l'utente non lo veda sullo schermo quando compila il modulo.

Se stai utilizzando 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, dovrai controllare la struttura HTML nella tua pagina per assicurarti che il selettore corrisponda alla struttura.

2) Utilizza un plugin come quello menzionato prima (http://wordpress.org/extend/plugins/wp-email-login/) per permettere agli utenti di accedere con il loro indirizzo email.

12 giu 2013 06:57:48