カテゴリー
WordPressプラグイン

Contact Form 7のラジオボタンを必須項目に(最新版)

今回は WordPress での超定番のフォーム用プラグイン Contact Form 7でのラジオボタンの必須項目化についての解説です。

現行バージョン(確認時:バージョン5.1.3)ではラジオボタンのデフォルト値を設定しない場合、未選択の状態で表示されます。このまま送信すると「必須項目に入力してください」のエラーが表示されます。つまり、下記対処は不要になります。

この Contact Form 7ではショートコードの項目にアスタリスクを加えて[text* name]のような形にすることで必須として指定することができます。
しかし、ラジオボタンに関しては[radio*]としても必須にはなりません。
Contact Form 7の作者は見解のように HTML の正しい仕様ではないということでプラグイン側では対応しないようです。

まあ、是非はともかく、顧客側の要望もあり、いたしかたない部分もあるように思います。
Contact Form 7で wpcf7_checkbox_shortcode_handler()という関数にフックさせることで必須項目化するという記事が紹介されていたため、早速試してみました。

あれっ、ラジオボタン自体が出力されませんね・・・

確認してみたところ、[radio*]というショートコードの登録まではうまくいっているものの、呼び出す wpcf7_checkbox_shortcode_handler()関数自体が存在しないため、何も処理を行わず終了しているようです。

たしかに checkbox.php の中にも wpcf7_checkbox_shortcode_handler()は見当たりません。
しかし、似たような処理を行っている wpcf7_checkbox_form_tag_handler()という関数を見つけたため、この関数を呼び出してみたところラジオボタンが出力されました。
ちゃんと必須項目として動作しています。

<?php
add_action( 'wpcf7_init', 'wpcf7_add_shortcode_radio_required' );
function wpcf7_add_shortcode_radio_required(){
  wpcf7_add_shortcode( array('radio*'), 'wpcf7_checkbox_form_tag_handler', true );
}
add_filter( 'wpcf7_validate_radio*', 'wpcf7_checkbox_validation_filter',10,2);
?>
ラジオボタンの必須項目化
ラジオボタンが必須項目に

わたしが確認したのは Contact Form 7バージョン4.6ですが、おそらくバージョンアップにより関数名が変更になっているんですね。
現時点ではネット上のほとんどの情報では動作しないと思います。

ということで、新しい関数名での指定は下記を functions.php に追加して、他の必須項目と同様に[radio* sex “女性” “男性”]のように指定すれば必須項目として動作します。

profile image

執筆:R3098

WEB サービス構築・監修が生業です。WordPress 関連では Aurora Heatmap などプラグイン開発も行っています。悩めるサイト運営者の無料相談受付けます!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトは reCAPTCHA によって保護されており、Google のプライバシーポリシー および 利用規約 に適用されます。

reCaptcha の認証期間が終了しました。ページを再読み込みしてください。