【WordPress】Contact Form 7のラジオボタンを必須項目にする方法【2022年5月現在】

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’ を指定するんだよとだけ覚えておけば大丈夫です。

必須化がたまに必要になるシーンがあるので備忘録として残しておきます!

About Me

プロフィール画像

ユーキと申します。北海道恵庭市という札幌と新千歳空港の間でフリーランスのWebエンジニアとして活動してます。

当サイトのブログでは、主にWeb制作全般、フリーランス周りの情報など色々なノウハウや知識を載せています。
その他日々気になったこと、思ったことも書いてます。

お仕事の相談など何かありましたら、お問い合わせかツイッターのDMからお気軽にご連絡くださいませ。

お問い合わせはこちら

ツイッターはこちら

ポートフォリオはこちら

Latest Posts

Popular Posts

TOP