WordPressで一番使われているんじゃないか!?と言っても過言じゃない、「Contact Form 7」。デフォルトで、送信完了画面や確認画面はついていないけど、とても使いやすく人気があるお問い合わせプラグインなのは、間違いありません!
そこでよく一緒に使われるのが、「Contact Form 7 Multi-Step Forms」というプラグイン。これを使えば、とっても簡単に確認ページや完了ページが作れます。
…なんですが、実際に運用しているとこんな声がよく聞こえてきます。
実はこれ、ブラウザのキャッシュや履歴の扱いが原因で起きる、ちょっと厄介なトラブルなんです。
でも大丈夫!この記事では、そんな「Contact Form 7」の送信後トラブルをスッキリ解決する方法を、初心者の方でもわかりやすくご紹介していきます!
Contact Form 7 に送信完了ページを追加する方法
「 Multi-Step Forms 」について知っている人や、フォームが残る問題の解決方法だけを知りたい人は 3ステップ or 2ステップ へ
「Contact Form 7」に送信完了画面ってどうやって付けるの?
と思う方もいらっしゃいますよね?そう思うのもそのはず!「Contact Form 7」単体では送信完了画面や確認画面は作る機能はありません。

でも、大丈夫!「Contact Form 7 」に、「Contact Form 7 Multi-Step Forms」というプラグインを追加するだけで、簡単に作ることができるよ。
Multi-Step Formsを使うメリット
このプラグインを組み合わせると、
- ステップごとにフォームを分けられる(入力画面→確認画面→完了画面)
- 簡単に確認画面を作ることができる
- 完了ページに自動遷移する設定も可能
…と、ユーザーにとっても分かりやすく、運用者にも扱いやすいフォームが簡単に実現できます。
Multi-Step Formsのデメリット
ただし、この便利なステップ構成、送信後の動作にちょっとした落とし穴があることも事実。
…といった、「送信後の不具合」や「体験上の違和感」が起こるケースもあるんです。
このあと紹介するセクションでは、確認画面あり・なしの構成別に注意すべきポイントや、具体的なトラブル対処法・カスタマイズコードまでしっかり解説していきます!!
コードはどこに書けばいいの?初心者さんも安心の手順ガイド
「カスタマイズって難しそう…」
そんなふうに感じる方もご安心ください。実は、WordPressの管理画面からとても簡単にコードを追加できる場所があるんです!
以下の手順通りに進めていけば、初めての方でも安心して作業できますよ。
1)WordPressの管理画面から「外観」→「テーマファイルエディター」をクリック

2)「function.php」ファイルを選択
画面右側にテーマファイルの一覧が表示されるので、「function.php」という名前のファイルをクリックしましょう

子テーマを使っている場合は必ずそちらを選んでください!
親テーマを直接編集すると、アップデート時に上書きされてしまう可能性があります。
※今回の例では「FrankuL の子テーマ」を使用しています。
3)コードを追加して「ファイルを更新」
手順に沿って進めたら、表示された編集画面の一番下に、
必要なコードをコピペして追加し、「ファイルを更新」をクリックするだけ!

次のセクションでは、実際に書き込む具体的なコードとその説明をわかりやすく解説していきます!そのままコピペで使えるので、ぜひチェックしてください。
Contact Form 7「入力→確認→完了」の3ステップ構成で設定する場合のトラブル防止方法
WordPressでお問い合わせフォームを作るとき、「入力 → 確認 → 完了」の3ステップ構成にしたい方も多いのではないでしょうか?中でも「確認画面」を挟むスタイルは、送信前に内容をチェックできるため、ユーザーにとって安心感がある丁寧な設計です。
ただし、この構成には思わぬ落とし穴も…。
といったトラブルが起こってしまうことが多いんです。
ここでは、これらの問題を一発で解決できるコードと、その仕組みを初心者にもわかりやすく解説していきます!
今回のページ構成
- 入力ページ:/contact/
- 確認ページ:/confirm/
- 完了ページ:/thanks/
※スラッグは、ご自身のサイトに合わせて変えてください。
例)https://myhome.com/blog/contact/ の場合は “/blog/contact/”
この設定で解決できること!
Contact Form 7の3ステップをしっかり守るカスタム設定
完了ページのキャッシュを無効にする(PHP)
function add_cache_control_for_thanks_page() {
if ( is_page('thanks') ) {
echo '<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">' . "\n";
echo '<meta http-equiv="Pragma" content="no-cache">' . "\n";
echo '<meta http-equiv="Expires" content="0">' . "\n";
}
}
add_action('wp_head', 'add_cache_control_for_thanks_page');
⭐️効果
確認ページへの不正遷移を防ぐ(JS)
add_action('wp_footer', function () {
if (is_page('confirm')) {
?>
<script>
document.addEventListener("DOMContentLoaded", function () {
const isVisited = sessionStorage.getItem('cf7-confirm-accessed');
if (!isVisited) {
// 入力ページにリダイレクト
window.location.href = '/contact/';
} else {
sessionStorage.removeItem('cf7-confirm-accessed');
}
});
</script>
<?php
}
⭐️効果
入力ページで通行証(セッション)を発行(JS)
if (is_page('contact')) {
?>
<script>
document.addEventListener("DOMContentLoaded", function () {
const confirmButton = document.querySelector('form.wpcf7-form input[type="submit"]');
if (confirmButton) {
confirmButton.addEventListener('click', function () {
sessionStorage.setItem('cf7-confirm-accessed', 'true');
});
}
});
</script>
<?php
}
});
⭐️効果
一発コピペOK!3ステップ構成のまとめコード
function add_cache_control_for_thanks_page() {
if ( is_page('thanks') ) {
echo '<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">' . "\n";
echo '<meta http-equiv="Pragma" content="no-cache">' . "\n";
echo '<meta http-equiv="Expires" content="0">' . "\n";
}
}
add_action('wp_head', 'add_cache_control_for_thanks_page');
add_action('wp_footer', function () {
if (is_page('confirm')) {
?>
<script>
document.addEventListener("DOMContentLoaded", function () {
const isVisited = sessionStorage.getItem('cf7-confirm-accessed');
if (!isVisited) {
window.location.href = '/contact/';
} else {
sessionStorage.removeItem('cf7-confirm-accessed');
}
});
</script>
<?php
}
if (is_page('contact')) {
?>
<script>
document.addEventListener("DOMContentLoaded", function () {
const confirmButton = document.querySelector('form.wpcf7-form input[type="submit"]');
if (confirmButton) {
confirmButton.addEventListener('click', function () {
sessionStorage.setItem('cf7-confirm-accessed', 'true');
});
}
});
</script>
<?php
}
});
このコードを functions.php に貼り付けるだけで…

ユーザーにとっても、運営側にとっても、安心で快適なフォームに早変わりです!
Contact Form 7「入力→完了 」の2ステップ構成で設定する場合のトラブル防止方法
「確認画面は使わず、入力→完了のシンプルな2ステップで運用したい!」
というケースはとても多いです。実際、多くのサイトでこの構成が採用されています。(入力→完了)です。
ただし、この構成でも以下のようなトラブルが起きやすくなります。
こうしたストレスをスッキリ解消する4つのステップを、初心者にもわかりやすく解説します!
今回のページ構成(例)
- お問い合わせページ:/contact/
- 完了ページ:/thanks/
※スラッグは、ご自身のサイトに合わせて変えてください。
例)https://myhome.com/blog/contact/ の場合は “/blog/contact/”
この方法で解決したいこと!
これで安心!キャッシュと履歴のクリア方法
完了ページのキャッシュを無効化(PHP)
function add_cache_control_for_thanks_page() {
if ( is_page('thanks') ) {
echo '<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">' . "\n";
echo '<meta http-equiv="Pragma" content="no-cache">' . "\n";
echo '<meta http-equiv="Expires" content="0">' . "\n";
}
}
add_action('wp_head', 'add_cache_control_for_thanks_page');
⭐️効果
入力ページでもキャッシュを無効化(PHP)
function add_cache_control_for_contact_page() {
if ( is_page('contact') ) {
echo '<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">' . "\n";
echo '<meta http-equiv="Pragma" content="no-cache">' . "\n";
echo '<meta http-equiv="Expires" content="0">' . "\n";
}
}
add_action('wp_head', 'add_cache_control_for_contact_page');
⭐️効果
完了ページで「戻るボタン」を無効化(JS)
add_action('wp_footer', function () {
if (is_page('thanks')) {
?>
<script>
document.addEventListener("DOMContentLoaded", function () {
history.replaceState(null, null, location.href);
window.addEventListener('popstate', function () {
window.location.href = '/contact/';
});
});
</script>
<?php
}
});
⭐️効果
入力ページに戻ったらフォームをリセット(JS)
add_action('wp_footer', function () {
if (is_page('contact')) {
?>
<script>
document.addEventListener("DOMContentLoaded", function () {
const form = document.querySelector('form.wpcf7-form');
if (form) {
form.reset();
}
});
</script>
<?php
}
});
⭐️効果
一発コピペOK!2ステップ構成のまとめコード
function add_cache_control_for_thanks_page() {
if ( is_page('thanks') ) {
echo '<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">' . "\n";
echo '<meta http-equiv="Pragma" content="no-cache">' . "\n";
echo '<meta http-equiv="Expires" content="0">' . "\n";
}
}
add_action('wp_head', 'add_cache_control_for_thanks_page');
function add_cache_control_for_contact_page() {
if ( is_page('contact') ) {
echo '<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">' . "\n";
echo '<meta http-equiv="Pragma" content="no-cache">' . "\n";
echo '<meta http-equiv="Expires" content="0">' . "\n";
}
}
add_action('wp_head', 'add_cache_control_for_contact_page');
add_action('wp_footer', function () {
if (is_page('thanks')) {
?>
<script>
document.addEventListener("DOMContentLoaded", function () {
history.replaceState(null, null, location.href);
window.addEventListener('popstate', function () {
window.location.href = '/contact/';
});
});
</script>
<?php
}
if (is_page('contact')) {
?>
<script>
document.addEventListener("DOMContentLoaded", function () {
const form = document.querySelector('form.wpcf7-form');
if (form) {
form.reset();
}
});
</script>
<?php
}
});
このコードを functions.php に追加すると…

ぜひ、2ステップ構成でも「わかりやすく・快適」なフォームにアップデートしてみてね!
まとめ|Contact Form 7 の送信後トラブルをコードでスッキリ解決!
「Contact Form 7」はとても優秀なフォームプラグインですが、完了ページや確認ページを導入したあとの“送信後トラブル”に悩まされるケースも多いですよね。
今回は、そんなトラブルを解消する、キャッシュ・履歴のコントロール方法と具体的なコードをご紹介しました。functions.php にコードを追加するだけで、Contact Form 7 の使い心地が格段にアップするので、ぜひコピーして活用してみてください!
ちょっとした使い心地の工夫が、ユーザーからの満足度や安心感につながっていきます。あなたのサイトにぴったりなステップ構成を選んで、気持ちよく送れるフォームに改善していきましょう!