Je souhaite limiter les inscriptions en fonction du domaine associé à leur adresse électronique. Je regardais le crochet d'action user_register
, mais il déclenche après l'utilisateur est déjà inséré, ce qui, même s'il peut être piraté, est loin d'être idéal. Je veux préempter plutôt que de supprimer rétroactivement les utilisateurs non valides.
J'ai parcouru le code source dans wp-includes/user.php
, mais rien dans ce document ne semble être utile. J'ai remarqué le filtre pre_user_email
, mais cela ne semble offrir aucune option pour faire quelque chose d'utile car je ne vois pas le moyen de faire quoi que ce soit avec ça.
Vous regardez au mauvais endroit.
Lorsqu'un utilisateur tente de s'inscrire pour la première fois, son nom d'utilisateur et son courrier électronique sont traités et analysés dans la fonction register_new_user()
dans wp-login.php
. C'est là que vous voulez faire votre filtrage.
Avant la création de l'utilisateur, WordPress transmet l'identifiant, l'adresse e-mail et un tableau ou les erreurs de l'utilisateur assaini via l'action 'register_post'. S'il y a des erreurs après cela, l'utilisateur n'est pas ajouté et il verra les erreurs dans l'interface utilisateur.
Donc, la fonction non testée suivante pourrait aider:
function prevent_email_domain( $user_login, $user_email, $errors ) {
if ( strpos( $user_email, '@baddomain.com' ) != -1 ) {
$errors->add( 'bad_email_domain', '<strong>ERROR</strong>: This email domain is not allowed.' );
}
}
add_action( 'register_post', 'prevent_email_domain', 10, 3 );
Cela dépend si vous construisez votre propre formulaire d'inscription personnalisé dans lequel vous implémentez l'enregistrement de l'utilisateur réel ou si vous utilisez le formulaire d'inscription fourni par WordPress.
Si vous utilisez l'ancien, il n'y en a pas puisque vous aurez accès aux données POST
et serez responsable de l'appel de wp_insert_user()
ou wp_create_user()
et de vous assurer que toutes les informations requises sont correctes: nom d'utilisateur, email, etc.
Dans ce dernier cas, accrochez-vous à l'action register_post
. Cela se trouve dans wp-login.php
dans la fonction register_new_user()
.
/**
* Code snippet...
*/
} elseif ( email_exists( $user_email ) ) {
$errors->add( 'email_exists', __( '<strong>ERROR</strong>: This email is already registered, please choose another one.' ) );
}
do_action( 'register_post', $sanitized_user_login, $user_email, $errors );
$errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email );
/** rest of the code after... **/