MW WP Formの電話番号チェックを少しカスタマイズするお話。
電話番号のパターン
電話番号のパターンは、以下。
- 固定電話:03 0000 0000、045 000 0000(10桁)
- フリーダイヤル:0120 000 000(10桁)
- 携帯:070 0000 0000、080 0000 0000、090 0000 0000(11桁)
- IP:050 0000 0000(11桁)
バリデーションルール「電話番号」
フォームタグ「mwform_tel 」にバリデーションルール「電話番号」をかけた場合、
例えば「030 0000 0000」「080 000 0000」「0800 00 0000」「08000 0 0000」はエラーを出さないんですね。
実際に電話をかける際は、数字さえ合っていれば区切りはどうでも良いのですが、
上記の例はあり得ない番号です。
正規表現?
- 先頭が050、070、080、090
- そのほか
を正規表現で書き、条件分岐にしてバリデーションを適用させればフォーム「mwform_tel 」で厳密な番号チェックが出来ると思いますが、ちょっと難しい。
トライすればよい勉強にはなると思いますが、、、
入力による条件分岐 + mwform_text
お客様からは、「固定、携帯別欄でもいいよ」と妥協して頂いていたので、
- 固定、携帯/IPどちらか必須
- 固定電話なら10桁
- 携帯、IPなら11桁
という線で書いてみました。
function phone_validation_rule( $Validation, $data, $Data ) {
if( $data['your-phone1'] ){
}else{
$Validation->set_rule( 'your-phone2', 'noEmpty', array(
'message' => 'どちらかを入力してください。'
) );
}
if( $data['your-phone2'] ){
}else{
$Validation->set_rule( 'your-phone1', 'noEmpty', array(
'message' => 'どちらかを入力してください。'
) );
}
return $Validation;
}
add_filter( 'mwform_validation_mw-wp-form-xxx', 'phone_validation_rule', 10, 3 );
- phone_validation_rule = 任意の関数名
- your-phone1 = 固定電話
- your-phone2 = 携帯/IP
- エラーメッセージ = どちらかを入力してください。
※「mw-wp-form-xxx」のxxxはフォームの識別子
フォーム編集画面のバリデーションルールで、
- your-phone1:文字数の範囲10~10、半角数字
- your-phone2:文字数の範囲11~11、半角数字
これで希望する動作となりました。
あと、それぞれのフォームにはplaceholderに入力例、「全角を半角に自動変換」を適用しておいた方が入力が分かりやすいですね。
MW WP Formの条件分岐についての一番ベーシックな使用例と思います。
全てのフォームに適用
上記は特定のフォームをカスタマイズする例ですが、フォームがたくさんあってすべてのフォームに適用したい場合はバリデーションルールの追加ウィンドウそのものを改変することが必要です。
結構複雑になるので、まんまコピペでOKな記事を。