Email come Username nella registrazione

7 ott 2016, 11:37:56
Visualizzazioni: 14.2K
Voti: 3

Molti utenti vorrebbero permettere la registrazione in un sito WordPress senza un username, utilizzando solo un'email.

Questo è un problema di base, quindi la soluzione (un trucco) è sostituire l'username con l'email.

Se WordPress richiede un username e un'email per la registrazione, possiamo prendere il valore dell'email e inserirlo nel valore dell'username. Nel modulo di registrazione gli utenti vedranno due campi:

  1. la tua email
  2. ripeti la tua email

Questo è un trucco, perché per WordPress i campi reali saranno: 1. username (come la tua email) 2. la tua email (come ripeti la tua email)

Ma c'è un altro problema: il carattere @ (chiocciola) è permesso per l'username?

Come possiamo fare questo?

Dovremmo inserire un codice nel file functions.php?.. qualcosa come questo:

add_action( 'wp_core_validate_user_signup', 'custom_validate_user_signup' );

function custom_validate_user_signup($result)
{
  // Rimuove gli errori relativi al nome utente
  unset($result['errors']->errors['user_name']);

  // Se l'email è valida e non ci sono errori
  if(!empty($result['user_email']) && empty($result['errors']->errors['user_email']))
  {
    // Imposta l'username come hash MD5 dell'email
    $result['user_name'] = md5($result['user_email']);
    $_POST['signup_username'] = $result['user_name'];
  }

  return $result;
}

Grazie in anticipo!

3
Commenti

da WordPress 4.6 è possibile accedere con email e password. quindi non sono più necessari trucchi

mmm mmm
7 ott 2016 13:19:41

@mmm Lo so, ma ho bisogno di sincronizzare il valore del nome utente con il valore dell'email (l'unico importante da richiedere) per gestire meglio gli errori, ad esempio se un utente inserisce due email che non corrispondono, ecc... Ho bisogno di un lavoro più pulito. ;)

user3437268 user3437268
7 ott 2016 17:47:24

Questa non è una buona idea. Cosa succede se l'utente aggiorna la sua email? Allora il nome utente punterà ancora alla vecchia email. E se implementi un hook per aggiornare il nome utente quando cambia l'email, l'utente verrà improvvisamente disconnesso.

Maciej Kravchyk Maciej Kravchyk
5 feb 2022 19:09:47
Tutte le risposte alla domanda 3
9

Puoi utilizzare @ e . nei nomi utente, quindi non ci sono problemi. Ora potresti creare il tuo modulo di registrazione e usare register_new_user(). Potresti persino manipolare wp_registration_url() con il filtro register_url, così il link di registrazione punterà alla tua nuova pagina di registrazione.

Se vuoi usarlo con l'interfaccia standard fornita da wp-login.php, avrai bisogno di qualche soluzione alternativa. Diciamo che vuoi mostrare solo il campo email per la registrazione, potresti semplicemente (beh, è un po' artificioso) nascondere il campo username con qualcosa del genere:

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

Nota a margine: C'è anche la possibilità di caricare fogli di stile in wp-login.php usando l'azione login_enqueue_scripts.

Ma se lo fai invierai un nome utente vuoto, quindi devi intervenire su due filtri: sanitize_user e 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 sostituiamo la stringa vuota con l'indirizzo email. Successivamente il nome utente sarà validato con validate_username, ma di nuovo verrà usato un nome utente vuoto, quindi dobbiamo gestire anche questo caso.

Ma penso che creare un modulo personalizzato sarebbe preferibile e meno artificioso.

7 ott 2016 14:00:38
Commenti

Sei sulla strada giusta, ma non puoi restituire $_POST['user_email'] come username, non è sanificato e potrebbe contenere caratteri non validi per l'username di WP; ciò causerà problemi in futuro.

user42826 user42826
7 ott 2016 16:57:27

Sì, non sono sicuro al 100% neanche io, ma non trovo un esempio in cui qualcosa in $_POST['user_email'] passi come email valida e causi comunque problemi come username.

websupporter websupporter
7 ott 2016 17:42:50

Quindi, non esiste una funzione che prende il "valore email" e lo inserisce nel "valore username"??? :/

user3437268 user3437268
7 ott 2016 17:59:57

Potresti usare l'azione user_register per modificare nuovamente il nome utente dopo la registrazione riuscita per essere sicuro. https://codex.wordpress.org/Plugin_API/Action_Reference/user_register Ma non ho visto altre operazioni di sanitizzazione su user_email. Controllerò di nuovo.

websupporter websupporter
7 ott 2016 19:13:02

Grazie @websupporter! Al momento uso il plugin WP User Manager, che permette di cambiare l'etichetta dei campi, quindi ho sostituito "Username" con "Inserisci La Tua Email" e "Email" con "Ripeti La Tua Email". Non è la soluzione migliore, non ho il controllo se i valori inseriti nei campi corrispondono, ma funziona...

user3437268 user3437268
7 ott 2016 19:52:06

Questo codice funziona bene per wp core, basta inserirlo nel file functions.php: 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']; } });

user3437268 user3437268
8 ott 2016 11:20:10

fantastico. Aggiungilo come risposta e segnalalo così altre persone possono trovarlo rapidamente :)

websupporter websupporter
8 ott 2016 11:51:01

Ciao, grazie per la condivisione ho quasi la stessa domanda. Voglio forzare l'uso dell'Email come username aggiungendo un @ e il . obbligatorio nel campo username. C'è qualcosa di nuovo riguardo la tua soluzione?

Samuel Samuel
19 lug 2017 17:44:17

Sai se questo può essere fatto anche nel Pannello di Controllo di WP? Non sembra che utilizzi la stessa validazione.

Louis W Louis W
26 mag 2018 10:37:11
Mostra i restanti 4 commenti
0

Ecco quello che ho usato:

jQuery(document).ready(function($){
    // nasconde il campo username
    $('input#user_login').parent().parent().hide();
    // forza lo username a rispecchiare l'input del campo email
    $('input#email').on('change',function(){
        $('#user_login').val($(this).val());
    });
});

Semplice ed efficace.

22 ott 2017 06:46:02
1

Aggiungi questo nel file functions.php (o in un altro file php):

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

L'azione stamperà lo script nel "footer" di wp-login.php. Il javascript nasconde l'etichetta e l'input "user_login", e imposta il suo valore con quello dell'input email.

4 feb 2019 13:12:03
Commenti

Per favore [modifica] la tua risposta e aggiungi una spiegazione: perché questa soluzione potrebbe risolvere il problema?

fuxia fuxia
4 feb 2019 15:07:15