Pot să interceptez înregistrarea utilizatorilor *înainte* de crearea unui cont?
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.

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

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

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ă... **/
