WordPress のドキュメントを見て、Filter_Reference/user_registration_email かなぁと思ったのですが、内容が 登録時のメールアドレスチェック(バリデーション)なので、Filter_Reference/registration_errors の方が良さそうです。
たとえば、テストしていませんが、こんな感じでしょうか。
登録フォームで登録ボタンを押すと メールアドレスにドメインを含まない場合にフォームの上にエラーメッセージが表示されると思います。
PHP
1function email_check_mydomain_tt145722( $errors, $sanitized_user_login, $user_email ) {
2
3 if ( ! preg_match('/@example.com$/i', $user_email ) ) {
4 $errors->add( 'email_error', '<strong>ERROR</strong>: email address does not include domain.' );
5 }
6
7 return $errors;
8}
9add_filter( 'registration_errors', 'email_check_mydomain_tt145722', 10, 3 );
10
(2018-09-26 11:00 追記)
コメントでうまくいかないとあったので、WordPress + WP-Members + twentyseventeen で、実際に試してみました。
functuions.php の最後に 下記のコードを追加。
(回答に記載したコードに デバッグ確認のために一部修正。 preg_match で一致した文字列の確認用に $matches を追加とログ出力用の error_log 関数を4行追加しています。また、エラーとは関係ないですが、正規表現のパターンで、 .
のエスケープが抜けていたので追加しています。)
function email_check_mydomain_tt145722( $errors, $sanitized_user_login, $user_email ) {
error_log( "errors(IN) = ". var_export( $errors , true ), 3, WP_CONTENT_DIR ."/debug.log" ); // デバッグ用
error_log( "user_email = ". var_export( $user_email , true ), 3, WP_CONTENT_DIR ."/debug.log" ); // デバッグ用
if ( ! preg_match('/@example.com$/i', $user_email , $matches) ) {
$errors->add( 'email_error', '<strong>ERROR</strong>: email address does not include domain.' );
}
error_log( "matches = ". var_export( $matches , true ), 3, WP_CONTENT_DIR ."/debug.log" ); // デバッグ用
error_log( "errors(OUT) = ". var_export( $errors , true ), 3, WP_CONTENT_DIR ."/debug.log" ); // デバッグ用
return $errors;
}
add_filter( 'registration_errors', 'email_check_mydomain_tt145722', 10, 3 );
まず、正しいドメインで、テスト。
デバッグログは、
errors(IN) = WP_Error::__set_state(array(
'errors' =>
array (
),
'error_data' =>
array (
),
))
user_email = 'name@example.com'
matches = array (
0 => '@example.com',
)
errors(OUT) = WP_Error::__set_state(array(
'errors' =>
array (
),
'error_data' =>
array (
),
))
となり、正規表現のパターンとドメイン部分が一致しているので、エラーは出ていません。問題なく登録できます。(下図)
不正なアドレスで登録の方は、デバッグログが、
errors(IN) = WP_Error::__set_state(array(
'errors' =>
array (
),
'error_data' =>
array (
),
))
user_email = 'name@example.net'
matches = array (
)
errors(OUT) = WP_Error::__set_state(array(
'errors' =>
array (
'email_error' =>
array (
0 => '<strong>ERROR</strong>: email address does not include domain.',
),
),
'error_data' =>
array (
),
))
となり、ドメインが一致しないので、$errors にエラーメッセージが追加されています。また、画面にもエラーが出ます。(下図)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/11 11:32
2018/09/26 02:08 編集
2018/09/12 22:19
2018/09/16 02:56
2018/09/16 03:16
2018/09/16 03:44 編集
2018/09/24 22:01
2018/09/25 02:19 編集
2018/09/25 21:36 編集
2018/09/25 22:13 編集
2018/09/26 02:07
2018/10/02 02:59