Pot să interceptez înregistrarea utilizatorilor *înainte* de crearea unui cont?

31 ian. 2013, 02:03:31
Vizualizări: 15.6K
Voturi: 7

Doresc să limitez înregistrarea pe baza domeniului asociat adresei de email. Am analizat hook-ul user_register, dar acesta se declanșează după ce utilizatorul este deja inserat, ceea ce, deși ar putea fi modificat să funcționeze, nu este ideal. Prefer să previn înregistrarea utilizatorilor invalizi decât să îi elimin ulterior.

Am parcurs codul sursă din wp-includes/user.php, dar nu am găsit nimic util acolo. Am observat filtrul pre_user_email, dar acesta nu pare să ofere opțiuni pentru a face ceva util, deoarece nu văd cum aș putea folosi acest lucru.

2
Comentarii

Articol excelent și cuprinzător: https://usersinsights.com/wordpress-user-registration-hooks-visualized/

That Brazilian Guy That Brazilian Guy
31 dec. 2018 01:23:25
Toate răspunsurile la întrebare 2
2
15

Cauți în locul greșit.

Atunci când un utilizator încearcă să se înregistreze pentru prima dată, numele de utilizator și adresa de email sunt procesate și curățate în funcția register_new_user() din wp-login.php. Aici este locul unde dorești să faci filtrarea.

Înainte ca utilizatorul să fie creat, WordPress va trimite datele curățate (numele de utilizator, adresa de email) și un array de erori prin acțiunea 'register_post'. Dacă există orice erori după aceasta, utilizatorul nu va fi adăugat și va vedea erorile în interfața utilizator.

Așadar, următoarea funcție netestată ar putea ajuta:

function prevent_email_domain( $user_login, $user_email, $errors ) {
    if ( strpos( $user_email, '@baddomain.com' ) != -1 ) {
        $errors->add( 'bad_email_domain', '<strong>EROARE</strong>: Acest domeniu de email nu este permis.' );
    }
}
add_action( 'register_post', 'prevent_email_domain', 10, 3 );
31 ian. 2013 02:32:00
Comentarii

Care este diferența dintre filtrul "registration_errors" și acțiunea "register_post"?

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

Acțiunea register_post îți permite să declanșezi alte funcționalități înainte ca utilizatorul să fie creat. Filtrul registration_errors îți permite să introduci o "eroare" în funcționalitate și să întrerupi complet acțiunea de înregistrare.

EAMann EAMann
9 apr. 2018 17:00:34
0

Acest lucru depinde dacă construiești un formular personalizat de înregistrare unde implementezi procesul real de înregistrare a utilizatorului sau dacă folosești formularul de înregistrare oferit de WordPress.

Dacă folosești prima variantă, nu există restricții deoarece vei avea acces la datele POST și vei fi responsabil pentru apelarea funcțiilor wp_insert_user() sau wp_create_user() și pentru verificarea corectitudinii informațiilor obligatorii, cum ar fi numele de utilizator, email etc.

Pentru cea de-a doua variantă, folosește acțiunea register_post. Aceasta se găsește în fișierul wp-login.php, în funcția register_new_user().

/**
 * Fragment de cod...
 */
 } elseif ( email_exists( $user_email ) ) {
    $errors->add( 'email_exists', __( '<strong>EROARE</strong>: Acest email este deja înregistrat, te rugăm să alegi altul.' ) );
}

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

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

/** restul codului după... **/
31 ian. 2013 02:29:14