Posso agganciarmi alla registrazione utente *prima* che un utente venga creato?

31 gen 2013, 02:03:31
Visualizzazioni: 15.6K
Voti: 7

Voglio limitare la registrazione in base al dominio associato all'indirizzo email. Ho esaminato l'hook user_register, ma viene attivato dopo che l'utente è già stato inserito nel database, il che, sebbene si possa forzare a funzionare, non è l'ideale. Preferirei prevenire piuttosto che rimuovere retroattivamente gli utenti non validi.

Ho esaminato il codice sorgente in wp-includes/user.php, ma non ho trovato nulla di utile. Ho notato il filtro pre_user_email, ma non sembra offrire opzioni per fare qualcosa di utile poiché non vedo un modo per utilizzarlo efficacemente.

2
Commenti

Articolo eccellente e completo: https://usersinsights.com/wordpress-user-registration-hooks-visualized/

That Brazilian Guy That Brazilian Guy
31 dic 2018 01:23:25
Tutte le risposte alla domanda 2
2
15

Stai cercando nel posto sbagliato.

Quando un utente tenta di registrarsi per la prima volta, il suo username e email vengono elaborati e sanificati all'interno della funzione register_new_user() nel file wp-login.php. Questo è il punto dove vuoi applicare il tuo filtraggio.

Prima che l'utente venga creato, WordPress passerà il login utente sanificato, l'indirizzo email e un array di errori attraverso l'azione 'register_post'. Se ci sono errori dopo questo passaggio, allora l'utente non viene aggiunto e vedrà gli errori nell'interfaccia utente.

Quindi la seguente funzione non testata potrebbe aiutare:

function prevent_email_domain( $user_login, $user_email, $errors ) {
    if ( strpos( $user_email, '@baddomain.com' ) != -1 ) {
        $errors->add( 'bad_email_domain', '<strong>ERRORE</strong>: Questo dominio email non è consentito.' );
    }
}
add_action( 'register_post', 'prevent_email_domain', 10, 3 );
31 gen 2013 02:32:00
Commenti

Qual è la differenza tra il filtro "registration_errors" e l'azione "register_post"?

Jalali Shakib Jalali Shakib
9 apr 2018 09:37:04

L'azione register_post ti permette di attivare altre funzionalità prima che l'utente venga creato. Il filtro registration_errors ti consente di iniettare un "errore" nella funzionalità e interrompere completamente l'azione di registrazione.

EAMann EAMann
9 apr 2018 17:00:34
0

Questo dipende se stai costruendo un tuo modulo di registrazione personalizzato dove implementi effettivamente la registrazione dell'utente o se stai utilizzando il modulo di registrazione fornito da WordPress.

Se stai utilizzando il primo caso, non ci sono hook poiché avrai accesso ai dati POST e sarai tu a dover chiamare wp_insert_user() o wp_create_user() assicurandoti che tutte le informazioni richieste siano corrette, come username, email, ecc.

Per il secondo caso, agganciati all'azione register_post. Questa si trova in wp-login.php all'interno della funzione register_new_user().

/**
 * Frammento di codice...
 */
 } elseif ( email_exists( $user_email ) ) {
    $errors->add( 'email_exists', __( '<strong>ERRORE</strong>: Questa email è già registrata, per favore scegline un\'altra.' ) );
}

do_action( 'register_post', $sanitized_user_login, $user_email, $errors );

$errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email );

/** resto del codice dopo... **/
31 gen 2013 02:29:14