WordPressで確認・完了画面付きの問い合わせフォームを実装したいときに便利なプラグイン「MW WP Form」で、ラジオボタンやチェックボックスの選択された項目に応じて、他項目のバリデーション設定を必須に切り替える方法です。
簡単になりますがイメージとしては上のようなラジオボタン(またはチェックボックス)の項目があったとき、一番右の「その他」項目下にある入力フィールドは「その他」を選択した場合のみ必須項目にするという想定のもので、そのバリデーションの動きをmwform_validation_mw-wp-form-xxx
のフックを使って追加していきます。
実装にはそれぞれfunctions.php
へ下記のように記述し、フック名にあるxxx
の部分は自身が作成したフォームのkeyに併せて変更してください。
記述後に動きを確認すると、いずれも「その他」を選択したのに入力フィールドが未入力だった場合はエラーを示す文言が表示されるのを確認できます。
ラジオボタンの場合
ラジオボタンのname
がexample_radio
、「その他」項目を選択した場合の入力フィールドのname
がexample_radio_other
を指定したものになります。
functions.php
add_filter( 'mwform_validation_mw-wp-form-xxx', 'add_mwform_validation_rule', 10, 2 );
function add_mwform_validation_rule( $Validation, $data ) {
if ( $data['example_radio'] === 'その他' ) {
$Validation->set_rule( 'example_radio_other', 'noEmpty', array( 'message' => '「その他」を選択した場合はご入力ください。' ) );
}
return $Validation;
}
チェックボックスの場合
チェックボックスのname
がexample_check
、「その他」項目を選択した場合の入力フィールドのname
がexample_check_other
を指定したものになります。
functions.php
add_filter( 'mwform_validation_mw-wp-form-xxx', 'add_mwform_validation_rule', 10, 2 );
function add_mwform_validation_rule( $Validation, $data ) {
if ( isset( $data['example_check']['data'] ) && is_array( $data['example_check']['data'] ) ) {
if ( in_array( 'その他', $data['example_check']['data'] ) ) {
$Validation->set_rule( 'example_check_other', 'noEmpty', array( 'message' => '「その他」を選択した場合はご入力ください。' ) );
}
}
return $Validation;
}