MW WP Formで特定項目の入力時だけ別項目を必須にする条件付きバリデーション

公開日
最終更新日

MW WP Formでフォームを作っていると、「ある項目に入力があったときだけ、別の項目を必須にしたい」という条件付きのバリデーションが必要になることがあります。たとえば「その他」を選んだら、その内容欄を必須にする、といったケースです。

結論から言うと、mwform_validation_mw-wp-form-xxxフックを使い、条件に応じてset_rule()でバリデーションを追加することで実現できます。この記事では、そのフックの使い方と実装コード、バリデーション名の使い分けを解説します。

使うフック:mwform_validation_mw-wp-form-xxx

mwform_validation_mw-wp-form-xxxは、任意の入力フィールドにバリデーションを追加できるフックです。条件分岐でルールを出し分けたいときに便利です。

フック名の末尾xxxの部分には、フックを適用したいフォームの識別子(key)が入ります。keyは、フォームの作成画面に表示されているフォーム識別子で確認できます。たとえばmwform_formkey key="7188"と表示されていれば、xxx7188です。

実装コード

functions.phpに、次のようなコードを追加します。入力項目1に値があるとき、入力項目2を必須にする例です。

/**
 * my_validation_rule
 * @param object $Validation
 * @param array $data
 * @param MW_WP_Form_Data $Data
 * $Validation::set_rule の引数は name属性値, バリデーション名, オプション
 */
function my_validation_rule($Validation, $data, $Data) {
    if ($data['入力項目1']) {
        $Validation->set_rule('入力項目2', 'noEmpty', array('message' => '未入力です'));
    }
    return $Validation;
}
add_filter('mwform_validation_mw-wp-form-xxxx', 'my_validation_rule', 10, 3);

if ($data['入力項目1'])で「入力項目1に値があるか」を判定し、値があるときだけset_rule()で入力項目2にバリデーションを設定しています。set_rule()の引数は「name属性値」「バリデーション名」「オプション」の3つで、オプションのmessageでエラー時の文言を指定できます。入力項目1入力項目2には、実際のフォームのname属性を入れてください。

コールバックが受け取る3つの引数のうち、$dataには送信された各項目の値が入っています。$data['項目名']で個別の値を参照できるため、これを条件に使います。$Validationはバリデーションを管理するオブジェクトで、set_rule()でルールを追加する役割です。

応用として、たとえば「お問い合わせ種別」で『その他』が選ばれたときだけ『その他の内容』欄を必須にする、といった制御もできます。ifの条件をif ($data['種別'] === 'その他')のように書き換えれば、「値があるとき」だけでなく「特定の選択肢が選ばれたとき」という条件でも必須化できます。

バリデーション名の使い分け

必須にする項目の種類によって、指定するバリデーション名が変わります。

  • テキストの場合 → noEmpty
  • ラジオボタン・チェックボックスの場合 → required

テキスト欄なのにrequiredを指定したり、その逆にしたりすると、うまくバリデーションがかからないことがあります。項目のタイプに合わせて選ぶのがポイントです。

補足:MW WP Formの現状

MW WP Formは、現在は開発・サポートが終了しています。既存サイトの保守では引き続き使う場面がありますが、新規構築では、Contact Form 7などほかのフォームプラグインもあわせて検討するとよいでしょう。今回のような条件付きバリデーションは、既存のMW WP Form案件を引き継いだときに役立つはずです。

まとめ

  • 条件付きの必須化はmwform_validation_mw-wp-form-xxxフックで実装する
  • xxxにはフォーム識別子(key)を入れる
  • ifで条件を判定し、set_rule()でバリデーションを追加する
  • テキストはnoEmpty、ラジオ・チェックボックスはrequired

「入力があったら別の項目も必須にする」という制御は、フォームの入力ミスを防ぐうえで効果的です。条件分岐のバリデーションを押さえておけば、複雑な入力要件にも柔軟に対応できます。

IPPEI FUKUTA(株式会社バッズブルー 代表)

IPPEI FUKUTA(株式会社バッズブルー 代表)

WordPress専門のWeb制作者として15年・150サイト以上を担当。現場でつまずいた問題と解決策を、同じ制作者・フリーランスの方に向けて発信しています。無料のWeb便利ツール集「バドツール」を開発・運営中。