フォームの構築をしていると多いご要望の中に以下のようなものがありますよね。
「その他」の時は入力を必須に切り替えて欲しい。
連絡方法にメールを指定したときは、メールアドレスの入力を必須に切り替えてほしい。
・・・といったものです。
MW WP Formで選択項目を条件分岐するには?チェックボックスとラジオボタンの時の条件分岐・必須切り替えのカスタマイズ方法をまとめました。
当サイトでは、他にもMW WP Formの基本的な使い方やカスタマイズの方法について触れている記事がありますので、参考にしていただければと思います。
MW WP Formの基本的な使い方
MW WP Formで任意の場所にバリデーションエラーのメッセージを出す(選択項目の分割等)
目次
MW WP Form 条件分岐サンプルフォーム
1.まずは何もせずに「確認」を押す
・・・テキストボックスはエラーにならない
2.「その他」「メール」を選択して、「確認」
・・・テキストボックスが必須に切り替わっている
3.テキストボックスに入力して「確認」
・・・バリデーションエラーがなくなる
という流れで確認してもらうとわかりやすいでしょう。
こちらのページをご覧ください。
MW WP Form 選択項目による条件分岐・必須切り替えサンプルフォーム
フォームタグはこちら(HTML省略)
お問合せ項目(複数選択可) 必須
[[mwform_checkbox name=”お問合せ項目” children=”項目1,項目2,項目3,その他”]]
[[mwform_text name=”その他詳細” placeholder=”その他の場合は必須に切り替える”]]
ご連絡方法 必須
※電話番号は別途取得していると仮定
[[mwform_radio name=”ご連絡方法” children=”お電話,メール”]]
[[mwform_text name=”メールアドレス” placeholder=”メールの場合は必須に切り替える”]]
フォームのバリデーションルールはこちら
「お問合わせ項目」と、「ご連絡方法」は必須ですが、「メールアドレス」は必須にせず、アドレスの形式のみ判定してもらうようにしています。
functions.php に追加した記述
functions.php には、以下の記述を追加しています。
/* mw wp form validate */ function my_validation_rule( $Validation, $data ) { if ( isset( $data['お問合せ項目']['data'] ) && is_array( $data['お問合せ項目']['data'] ) ) { if ( in_array( 'その他', $data['お問合せ項目']['data'] ) ) { $Validation->set_rule( 'その他詳細', 'noEmpty', array( 'message' => 'その他の場合は必ずご記入下さい。' ) ); } } if ( $data['ご連絡方法'] === 'メール' ) { $Validation->set_rule( 'メールアドレス', 'noEmpty', array( 'message' => 'ご連絡方法にメールを選択された場合は必ずご記入下さい。' ) ); } return $Validation; } add_filter( 'mwform_validation_mw-wp-form-2799', 'my_validation_rule', 10, 2 );
2799というのは、フォームのIDです。フォームによって変わりますので注意しましょう。MW WP FormのショートコードにあるIDと同じになります。
今回のサンプルのMW WP Formのショートコードはこちら
[[mwform_formkey key=”2799″]]
MW WP Form 条件分岐方法の解説
カスタマイズの方法については、フォーラムで開発者様が解説されたコードを参考に(というかほぼそのまま)させて頂きました。
https://ja.forums.wordpress.org/topic/107342
serRule が set_ruleになるくらいでしょうか。
チェックボックスの場合
チェックボックスにある複数の項目の中で、「その他」が選択に含まれている場合の処理ということになります。チェックのときはこのような形にならないと、単純にその他がチェックされているか否かを判定するのでは不十分ということですね。
function内の以下がチェックボックスの条件分岐をする部分です
if ( isset( $data['お問合せ項目']['data'] ) && is_array( $data['お問合せ項目']['data'] ) ) { if ( in_array( 'その他', $data['お問合せ項目']['data'] ) ) { $Validation->set_rule( 'その他詳細', 'noEmpty', array( 'message' => 'その他の場合は必ずご記入下さい。' ) ); } }
ラジオボタンの場合
function内の以下がラジオの条件分岐をする部分です
if ( $data['ご連絡方法'] === 'メール' ) { $Validation->set_rule( 'メールアドレス', 'noEmpty', array( 'message' => 'ご連絡方法にメールを選択された場合は必ずご記入下さい。' ) ); }
ラジオボタンの場合はよりシンプルになりますね。
まとめ
様々なカスタマイズに対応してくださっているのがこのMW WP Formですね。
(公式マニュアル)
https://plugins.2inc.org/mw-wp-form/filter-hook/mwform_validation/
当サイトでも、基本的な使い方やカスタマイズの方法について触れていますので、参考にしていただければと思います。
MW WP Formの基本的な使い方
MW WP Formで任意の場所にバリデーションエラーのメッセージを出す(選択項目の分割等)
次回は「URL引数を有効にする」ってなんぞや?のエントリーでも更新できればと思います。