【WordPress】Contact Form 7のラジオボタンを必須項目にする方法【2022年12月現在】
Contact Form 7のラジオボタンを必須項目にする方法をまとめました。
調べてみたけど、最新バージョンで動作するものがなかなか出てこなかったので、少しでも役に立つと嬉しいです。
まず結論
functions.phpに以下を追加する。
function wpcf7_add_shortcode_radio_required() {
wpcf7_add_shortcode( array( 'radio*' ), 'wpcf7_checkbox_form_tag_handler', true );
}
add_action( 'wpcf7_init', 'wpcf7_add_shortcode_radio_required' );
add_filter( 'wpcf7_validate_radio*', 'wpcf7_checkbox_validation_filter', 10, 2 );
次にWordPressの管理画面で「お問い合わせフォーム」内のラジオボタンの記述を修正する。
[radio your-kind use_label_element "項目1" "項目2" "項目3"]
↓
[radio* your-kind use_label_element "項目1" "項目2" "項目3"]
これで非選択時にはエラーが出るようになります。
ラジオボタンにはなぜ必須項目がないのか?
公式が以下回答をしています。
入力必須版の radio (“radio*”) はありません。Contact Form 7 が “radio*” を提供しない理由は、そもそもラジオボタンとは入力必須のものだからです。このあたりのことについては HTML の仕様を見た方が早いでしょう。
なので、本来の想定した使い方としては、「default」オプションを設定した上での利用となります。
[radio your-kind use_label_element default:1 "項目1" "項目2" "項目3"]
動作しなかったコード
昔のバージョンで動いてたものなので、現在はこちらは動作しません!
ご注意ください!
function wpcf7_add_shortcode_radio_required() {
wpcf7_add_shortcode( array( 'radio*' ), 'wpcf7_checkbox_shortcode_handler', true ); // ここが古い!!
}
add_action( 'wpcf7_init', 'wpcf7_add_shortcode_radio_required' );
add_filter( 'wpcf7_validate_radio*', 'wpcf7_checkbox_validation_filter', 10, 2 );
プラグインの /modules/checkbox.php を確認すると、一番上にアクション関数を指定されています。
add_action( 'wpcf7_init', 'wpcf7_add_form_tag_checkbox', 10, 0 );
function wpcf7_add_form_tag_checkbox() {
wpcf7_add_form_tag( array( 'checkbox', 'checkbox*', 'radio' ),
'wpcf7_checkbox_form_tag_handler', // この記述
array(
'name-attr' => true,
'selectable-values' => true,
'multiple-controls-container' => true,
)
);
}
まとめ
ということで、現在は ‘wpcf7_checkbox_form_tag_handler’ を指定するんだよとだけ覚えておけば大丈夫です。
必須化がたまに必要になるシーンがあるので備忘録として残しておきます!