回答編集履歴

3

誤字の修正

2018/09/26 02:12

投稿

CHERRY
CHERRY

スコア25171

test CHANGED
@@ -46,7 +46,11 @@
46
46
 
47
47
  コメントでうまくいかないとあったので、WordPress + WP-Members + twentyseventeen で、実際に試してみました。
48
48
 
49
+
50
+
51
+ functuions.php の最後に 下記のコードを追加。
52
+
49
- functuions.php の最後に 下記のコードを追加。(回答に記載したコードに デバッグ確認のために preg_match で一致した文字列の確認用に $matches を追加して、ログ出力用の error_log 関数を4行追加しています。また、正規表現のパターンで、 `.` のエスケープが抜けていたので追加しています。)
53
+ (回答に記載したコードに デバッグ確認のために一部修正。 preg_match で一致した文字列の確認用に $matches を追加ログ出力用の error_log 関数を4行追加しています。また、エラーとは関係ないですが、正規表現のパターンで、 `.` のエスケープが抜けていたので追加しています。)
50
54
 
51
55
 
52
56
 
@@ -92,7 +96,7 @@
92
96
 
93
97
  ```
94
98
 
95
- errors = WP_Error::__set_state(array(
99
+ errors(IN) = WP_Error::__set_state(array(
96
100
 
97
101
  'errors' =>
98
102
 
@@ -122,7 +126,7 @@
122
126
 
123
127
 
124
128
 
125
- errors = WP_Error::__set_state(array(
129
+ errors(OUT) = WP_Error::__set_state(array(
126
130
 
127
131
  'errors' =>
128
132
 
@@ -154,7 +158,7 @@
154
158
 
155
159
  ```
156
160
 
157
- errors = WP_Error::__set_state(array(
161
+ errors(IN) = WP_Error::__set_state(array(
158
162
 
159
163
  'errors' =>
160
164
 
@@ -182,7 +186,7 @@
182
186
 
183
187
 
184
188
 
185
- errors = WP_Error::__set_state(array(
189
+ errors(OUT) = WP_Error::__set_state(array(
186
190
 
187
191
  'errors' =>
188
192
 

2

実際に試した結果を追記。

2018/09/26 02:12

投稿

CHERRY
CHERRY

スコア25171

test CHANGED
@@ -35,3 +35,181 @@
35
35
 
36
36
 
37
37
  ```
38
+
39
+
40
+
41
+ ----
42
+
43
+ (2018-09-26 11:00 追記)
44
+
45
+
46
+
47
+ コメントでうまくいかないとあったので、WordPress + WP-Members + twentyseventeen で、実際に試してみました。
48
+
49
+ functuions.php の最後に 下記のコードを追加。(回答に記載したコードに デバッグ確認のために preg_match で一致した文字列の確認用に $matches を追加して、ログ出力用の error_log 関数を4行追加しています。また、正規表現のパターンで、 `.` のエスケープが抜けていたので追加しています。)
50
+
51
+
52
+
53
+ ```
54
+
55
+ function email_check_mydomain_tt145722( $errors, $sanitized_user_login, $user_email ) {
56
+
57
+
58
+
59
+ error_log( "errors(IN) = ". var_export( $errors , true ), 3, WP_CONTENT_DIR ."/debug.log" ); // デバッグ用
60
+
61
+ error_log( "user_email = ". var_export( $user_email , true ), 3, WP_CONTENT_DIR ."/debug.log" ); // デバッグ用
62
+
63
+
64
+
65
+ if ( ! preg_match('/@example.com$/i', $user_email , $matches) ) {
66
+
67
+ $errors->add( 'email_error', '<strong>ERROR</strong>: email address does not include domain.' );
68
+
69
+ }
70
+
71
+
72
+
73
+ error_log( "matches = ". var_export( $matches , true ), 3, WP_CONTENT_DIR ."/debug.log" ); // デバッグ用
74
+
75
+ error_log( "errors(OUT) = ". var_export( $errors , true ), 3, WP_CONTENT_DIR ."/debug.log" ); // デバッグ用
76
+
77
+
78
+
79
+ return $errors;
80
+
81
+ }
82
+
83
+ add_filter( 'registration_errors', 'email_check_mydomain_tt145722', 10, 3 );
84
+
85
+ ```
86
+
87
+
88
+
89
+ まず、正しいドメインで、テスト。
90
+
91
+ デバッグログは、
92
+
93
+ ```
94
+
95
+ errors = WP_Error::__set_state(array(
96
+
97
+ 'errors' =>
98
+
99
+ array (
100
+
101
+ ),
102
+
103
+ 'error_data' =>
104
+
105
+ array (
106
+
107
+ ),
108
+
109
+ ))
110
+
111
+
112
+
113
+ user_email = 'name@example.com'
114
+
115
+
116
+
117
+ matches = array (
118
+
119
+ 0 => '@example.com',
120
+
121
+ )
122
+
123
+
124
+
125
+ errors = WP_Error::__set_state(array(
126
+
127
+ 'errors' =>
128
+
129
+ array (
130
+
131
+ ),
132
+
133
+ 'error_data' =>
134
+
135
+ array (
136
+
137
+ ),
138
+
139
+ ))
140
+
141
+ ```
142
+
143
+ となり、正規表現のパターンとドメイン部分が一致しているので、エラーは出ていません。問題なく登録できます。(下図)
144
+
145
+
146
+
147
+ ![example.com](17f991e19c3736b6928127bf97f01252.jpeg)
148
+
149
+
150
+
151
+
152
+
153
+ 不正なアドレスで登録の方は、デバッグログが、
154
+
155
+ ```
156
+
157
+ errors = WP_Error::__set_state(array(
158
+
159
+ 'errors' =>
160
+
161
+ array (
162
+
163
+ ),
164
+
165
+ 'error_data' =>
166
+
167
+ array (
168
+
169
+ ),
170
+
171
+ ))
172
+
173
+
174
+
175
+ user_email = 'name@example.net'
176
+
177
+
178
+
179
+ matches = array (
180
+
181
+ )
182
+
183
+
184
+
185
+ errors = WP_Error::__set_state(array(
186
+
187
+ 'errors' =>
188
+
189
+ array (
190
+
191
+ 'email_error' =>
192
+
193
+ array (
194
+
195
+ 0 => '<strong>ERROR</strong>: email address does not include domain.',
196
+
197
+ ),
198
+
199
+ ),
200
+
201
+ 'error_data' =>
202
+
203
+ array (
204
+
205
+ ),
206
+
207
+ ))
208
+
209
+ ```
210
+
211
+ となり、ドメインが一致しないので、$errors にエラーメッセージが追加されています。また、画面にもエラーが出ます。(下図)
212
+
213
+
214
+
215
+ ![example.net](a94d9bdf2171464061cbb1dca21c4a45.jpeg)

1

正規表現の i フラグを追加 ( case insensitive )

2018/09/26 02:06

投稿

CHERRY
CHERRY

スコア25171

test CHANGED
@@ -4,7 +4,9 @@
4
4
 
5
5
 
6
6
 
7
+ たとえば、テストしていませんが、こんな感じでしょうか。
8
+
7
- たとえば、テストしていませんが、こんな感じでしょうか。 登録フォームで登録ボタンを押すと メールアドレスにドメインを含まない場合にフォームの上にエラーメッセージが表示されると思います。
9
+ 登録フォームで登録ボタンを押すと メールアドレスにドメインを含まない場合にフォームの上にエラーメッセージが表示されると思います。
8
10
 
9
11
 
10
12
 
@@ -16,7 +18,7 @@
16
18
 
17
19
 
18
20
 
19
- if ( ! preg_match('/@example.com$/', $user_email ) ) {
21
+ if ( ! preg_match('/@example.com$/i', $user_email ) ) {
20
22
 
21
23
  $errors->add( 'email_error', '<strong>ERROR</strong>: email address does not include domain.' );
22
24