【WordPress】確認画面が前の入力のまま…Contact Form 7×キャッシュの原因と対処法

【WordPress】確認画面が前の入力のまま…Contact Form 7×キャッシュの原因と対処法 WordPress

Contact Form 7 に「確認画面(プレビュー)」を追加する拡張プラグインを導入したとき、入力を修正したのに確認画面に前の内容が残ってしまうケースがあります。多くの場合、その原因はブラウザやキャッシュ系プラグインが HTML をキャッシュしてしまうことです。ここでは原因と対処法を整理します。

スポンサーリンク

なぜ前の入力が残るのか?

  • ブラウザの「戻る」操作時にキャッシュされたページをそのまま再表示している
  • サーバーやキャッシュ系プラグイン(WP Super Cache / W3 Total Cache / LiteSpeed Cache など)がフォームページをキャッシュしている
  • CDN(Cloudflare など)が HTML をキャッシュしてしまい、更新が反映されない

Contact Form 7 自体はフォーム入力をセッションに保持していません。そのため、キャッシュによって古い状態が出てしまうと「修正が反映されない」ように見えるのです。

解決方法

1. フォームページのキャッシュを無効化する

確認画面を含むフォームページをキャッシュから除外しましょう。キャッシュ系プラグインやサーバーの管理画面で「特定ページをキャッシュしない」設定が可能です。

functions.php:no-cacheヘッダーの送信
// functions.php に no-cache ヘッダーを送る例
add_action('template_redirect', function() {
  if (is_page('contact')) { // 問い合わせページのスラッグに変更
    nocache_headers();
  }
});

2. meta タグでキャッシュ制御を追加

確認画面付きフォームのテンプレートに以下を追加すると、ブラウザにキャッシュさせにくくなります。

キャッシュ制御メタタグ
<meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">

3. JavaScript で強制的にフォームを初期化する

ページ読み込み時に値をリセットする方法もあります。ただし「確認画面から戻ったときに入力が消える」ので UX 的には注意が必要です。

フォームのリセット
document.addEventListener('DOMContentLoaded', function () {
  var form = document.querySelector('.wpcf7 form');
  if (form) form.reset();
});

4. CDN やブラウザキャッシュの設定を確認する

Cloudflare やサーバー側でキャッシュレベルが高すぎる場合、フォームページまで静的にキャッシュされます。「HTML キャッシュを除外する」ルールを設定してください。

確認画面プラグインの仕様を理解する

Contact Form 7 は標準で「確認画面機能」を持たないため、ほとんどの場合は CF7 Confirmations や Contact Form 7 Multi-Step Forms などの拡張を利用しています。これらは入力値を JavaScript で保持・コピーして表示していることが多く、キャッシュ環境下では意図通り動かない場合があります。プラグインの FAQ で「キャッシュ無効化」を推奨していることもあるので確認しましょう。

よくある質問(FAQ)

QCF7でフォーム送信後に入力内容が残り続ける問題の原因は?
Aページキャッシュプラグイン(W3 Total Cache等)が送信後のページをキャッシュしている場合に発生します。フォームページをキャッシュから除外するか、フォームのリダイレクト設定を確認します。
QCF7送信後にサンクスページにリダイレクトする設定は?
A「追加設定」タブのon_sent_okはContact Form 7 5.0(2018年1月)で廃止され、現在は機能しません。現在はDOM CustomEvent「wpcf7mailsent」をリッスンする方法が正しい実装です。
テーマのJSファイル:送信完了後のリダイレクト
document.addEventListener('wpcf7mailsent', function (event) {
  location.replace('https://example.com/thanks/');
}, false);

このコードは「追加設定」欄ではなく、wp_enqueue_script()で正しく読み込んだテーマ・子テーマのJSファイルに記述してください。「Contact Form 7 – Redirect」プラグインを使うとGUIで設定することもできます。

Qキャッシュと干渉しないようにCF7フォームページをキャッシュから除外するには?
AW3 Total CacheやWP Fastest Cacheの設定でフォームのURLをキャッシュ除外URLリストに追加します。LiteSpeed Cacheでは「Cache Exceptions」にフォームURLを追加します。

まとめ

  • 確認画面に古い入力が残るのは「キャッシュ」が原因であることが多い
  • フォームページをキャッシュから除外するのが基本解決策
  • meta タグや PHP の nocache_headers() で補助的に制御できる
  • CDN・キャッシュプラグイン・サーバー側キャッシュすべてを確認する
  • 送信後の処理はon_sent_okではなく、DOM CustomEvent「wpcf7mailsent」を使う

Contact Form 7 の確認画面を正しく動作させるには、キャッシュを適切にコントロールすることが必須です。フォームページだけでもキャッシュ除外を徹底すれば、入力内容が正しく反映されるようになります。