web-dev-qa-db-ja.com

ユーザーが作成される前に、ユーザー登録にフックできますか?

電子メールアドレスに関連付けられているドメインに基づいて登録を制限したいです。私はuser_registerアクションフックを見ていましたが、それは after の後に起動されていました。無効なユーザーを遡及的に削除するのではなく、横取りしたいです。

私はwp-includes/user.phpでソースを調べましたが、そこに役立つものは何もないようです。私はpre_user_emailフィルターに気付きましたが、それを使って何かをする方法が見当たらないので、それは有用なことをするためのオプションを提供するようには見えません。

4
Dan

あなたは間違った場所を見ています。

ユーザーが最初に登録を試みると、そのユーザー名と電子メールがwp-login.phpregister_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 );
8
EAMann

実際のユーザー登録を実装する独自のカスタム登録フォームを作成しているのか、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... **/
0
WP Themes