今回は、WordPressの定番プラグインContact Form 7で発生する「未定義の値がこの項目を通じて送信されました」エラーについて深掘りします。
「未定義の値がこの項目を通じて送信されました」エラーの原因は、選択肢データの不整合かキャッシュによる検証トークン切れ
まず結論から言うと、このエラーは「フォームが提示した選択肢以外(=未定義)のものが送られてきたぞ」という、Contact Form 7の厳格なバリデーション機能が働いている証拠です。スパム判定ではなく、純粋な「データ不整合」です。
このエラーが出た時、思考停止でタグを消して作り直す前に、以下の2つをチェックしてみてください。
原因①:ドロップダウン(select)の「パイプ処理」と空項目の記述ミス
一番多いのが、ドロップダウンメニューやチェックボックスでの記述ミスです。特に、「値」と「ラベル」を分けるパイプ処理(|)を使っている場合や、先頭に空の選択肢を入れる場合に多発します。
もし、以下のようなコードを書いていませんか?
【修正前】よくあるNG記述
|
1 |
[select* your-subject include_blank "お問い合わせ|general" "採用について|recruit"] |
一見良さそうですが、include_blank(「—」のような空の選択肢)の扱いが、Contact Form 7のバージョンやバリデーションのタイミングによって「空の値」として正しく認識されず、「未定義の値」とみなされるケースがあります。
【修正後】2025年推奨の安全な記述
あえて include_blank を使わず、明示的に「選択してください」を空の値として定義する方法が最も確実です。|
1 |
[select* your-subject first_as_label "選択してください" "お問い合わせ|general" "採用について|recruit"] |
first_as_label: 1つ目の項目を選択肢ではなくラベル(値は空)として扱います。
“選択してください”: これの値は “”(空)になります。
原因②:キャッシュプラグインが「選択肢リスト」を古いままで保持している
「コードは間違っていないはずなのにエラーが消えない……」そんな時は、キャッシュを疑ってください。これ、意外と盲点です。Contact Form 7はフォームを表示する際、裏側で「現在有効な選択肢リスト」と「nonce(セキュリティトークン)」を生成します。
しかし、キャッシュプラグイン(WP RocketやW3 Total Cacheなど)が、「過去の選択肢リスト」や「期限切れのトークン」を持ったままのHTMLをユーザーに表示し続けていることがあります。
ユーザーは画面上の(古い)選択肢を選んで送信しますが、サーバー側のContact Form 7は「そんな選択肢、今の定義にはないよ(未定義)」と弾くわけです。
解決策
- キャッシュプラグインの設定で、お問い合わせページのURLを除外設定する。
- サーバーキャッシュ(Xserver等のサーバーパネル側)も一度クリアする。
【まとめ】焦らず「整合性」を確認しよう
「未定義の値」エラーは、Contact Form 7が正常に仕事をしている証拠です。コードの記述ミスか、キャッシュによる情報のズレか。この二点を冷静に見直せば、必ず解決します。
もしこの記事を読んでも直らない場合は、単純に「フォームタグの名前(name属性)を別の名前に変えて保存し直す」という荒療治も試してみてください。データベース内の整合性がリセットされて直ることがあります。


コメント