電子メールアドレスに関連付けられているドメインに基づいて登録を制限したいです。私はuser_register
アクションフックを見ていましたが、それは after の後に起動されていました。無効なユーザーを遡及的に削除するのではなく、横取りしたいです。
私はwp-includes/user.php
でソースを調べましたが、そこに役立つものは何もないようです。私はpre_user_email
フィルターに気付きましたが、それを使って何かをする方法が見当たらないので、それは有用なことをするためのオプションを提供するようには見えません。
あなたは間違った場所を見ています。
ユーザーが最初に登録を試みると、そのユーザー名と電子メールがwp-login.php
のregister_new_user()
関数内で処理され、サニタイズされます。これはあなたがあなたのフィルタリングをしたいところです。
ユーザーが作成される前に、WordPressはサニタイズされたユーザーログイン、電子メールアドレス、配列またはエラーを 'register_post'アクションを通じて渡します。それ以降にエラーが発生した場合、ユーザーは追加されず、UIにエラーが表示されます。
そのため、次の untested 関数が役に立ちます。
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 );
実際のユーザー登録を実装する独自のカスタム登録フォームを作成しているのか、WordPressが提供する登録フォームを使用しているのかによって異なります。
前者を使用している場合は、POST
データにアクセスしてwp_insert_user()
またはwp_create_user()
を呼び出し、必要なすべての情報が正しいことを確認する責任があります。
後者の場合はregister_post
アクションにフックします。これはregister_new_user()
関数内のwp-login.php
にあります。
/**
* 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... **/