Contact form 7で確認画面を表示するプラグインとして、Contact form 7 add confirmが有名でした。
Contact form 7 add confirmの更新が止まってしまったので、Contact Form 7 Multi-Step Formsに乗り換えている人が多いようです。

私は、確認画面が必要なフォームの場合、Contact form 7 add confirmを修正して最新版のContact form 7でも動くようにして使っています。
しかし、メンテナンスの手間を考えると、そろそろ別の方法の方がいいのかも、と思い始めていたところです。
試しにContact Form 7 Multi-Step Formsを使ってみようかと思ったのですが、色々香ばしい感じだったので、使うのを止めたところです。
この記事では、その経緯をまとめておこうと思います。
Contact Form 7 Multi-Step Formsを使うと起きる現象
Contact Form 7 Multi-Step Formsのフォームから、タグのみ表示された空メールが届いてしまう
こちらは使い方で発生する致命的な問題のように見えます。
https://qiita.com/sa_meichan/questions/da2f2ba067e891241054
- フォームを途中のページまで入力
- 前のページに戻ったりしたり、などしながらフォームページから離脱する
- 別の人がフォームを送信するとなぜか前回の離脱したデータでの送信も空データとして管理者宛へ送信されてしまう。
Contact Form 7 Multi-Step Formsで他人が入力された個人情報が確認画面で表示される
Contact Form 7 Multi-Step FormsはXserverで不具合がでやすい
Xserverでサーバー側でページキャッシュが効いてると過去に入力されたフォームの値が他人に表示されてしまうことがあるようです。

Contact Form 7 Multi-Step FormsはCookieにフォームデータを一時的に保存している
ユーザーのCookieの情報はページに表示されます (当然のことですが)。しかし、そのすべての情報を含むページ自体はキャッシュ システムによってキャッシュされています。このキャッシュされたページが取得されると、そのページを訪問したすべてのユーザーにCookie データが表示されます。
これを修正するには、 cf7msm_
で始まるページまたは Cookie を除外するようにキャッシュ システムを構成します。
長文のテキストを送信できない
Contact Form 7 Multi-Step Formsの無料バージョンでは、4KBのテキストしか送信できません。
4kbはおよそ1000~2000文字に相当。
長文のテキストを送りたい場合は、Contact Form 7 Multi-Step FormsのProバージョンが必要なようです。
マルチステップ フォームから大量のデータが送信されることが予想される場合は、Pro バージョンの方が適している可能性があります。PRO バージョンはセッション ストレージを使用するため、複数のフォームで約 1,000 倍のデータを処理できます。合計で約 5 MB を処理できますが、無料バージョンでは 4 KB です。
https://wordpress.org/plugins/contact-form-7-multi-step-module/

Contact Form 7 Multi-Step Formsを使うのを止めた方が安全
今までの内容を踏まえると、Contact Form 7 Multi-Step Formsはキャッシュと相性が悪そうです。
Contact Form 7 Multi-Step Formsは、ステップごとにフォームデータをCookieに保存するためです。
Cookieをキャッシュしないようにすれば、問題は避けられると思います。
一方、Contact form 7 add confirmは、Cookieは使用しておらず、ページキャッシュ対策が盛り込まれているように見えました。
add_action( 'plugins_loaded', 'wpcf7c', 11 );
function wpcf7c() {
wpcf7c_load_textdomain();
wpcf7c_load_modules();
nocache_headers();
}
add_filter('nocache_headers', "wpcf7c_nocache_headers", 10, 1);
function wpcf7c_nocache_headers($headers) {
$headers["Cache-Control"] = "no-store, no-cache, must-revalidate, max-age=0";
return $headers;
}
レスポンスヘッダに以下を含むコンテンツはキャッシュしません。
https://www.xserver.ne.jp/manual/man_server_cache.php
- Cache-Controlに「no-cache」「no-store」「private」「must-validate」のいずれかを含む場合
- Set-Cookieを含む場合
また、キャッシュプラグインなどで cf7msm_
で始まるCookieをキャッシュしないように設定する必要があります。
もしキャッシュ対策できたとしても、フォームの遷移動作に関わる部分で、そもそも動作に不具合がありそうなので、ビジネスサイトでは使用しない方が安全です。
Contact form 7の確認画面を自作している人もチラホラいる
Contact form 7の確認画面の需要というのは日本特有のものなのかもしれません。探してみても無料で使える目ぼしいプラグインは多くありません。
confirm plus contact form 7がリリースされたが利用者は多くない
Contact form 7 add confirmが使えなくなった後、日本製のプラグイン『confirm plus contact form 7』がリリースされましたが、Contact Form 7 Multi-Step Formsでいいんじゃね?という流れから、有効インストール数は5000程度で停滞しています。
confirm plus contact form 7プラグインのサポートフォーラムを見ても回答されずに放置されている感じもあり、使うことに不安を覚える人も多いでしょう。

Contact Form 7 Multi-Step Formsもビジネスサイトでは不安あり
Contact form 7 add confirmからContact Form 7 Multi-Step Formsに乗り換えの記事を見かけますが、ビジネスで使うのはリスクがあるという意見も多いです。
ネット上では、Contact form 7 add confirmの代わりにContact Form 7 Multi-Step Formsを使ってみたけど、今回触れたような挙動があるのでビジネスレベルでは使えない、自作した方がマシという人の記事をいくつか見かけます。
javascriptで確認画面を自作する人が増えてきている
【Contact form 7 確認画面 自作】とかのキーワードで見つかります。
確認画面が必要だけどまともに使えるプラグインが無いから自作した、というムーブですね。
Contact form 7 add confirm更新停止
⇒Contact Form 7 Multi-Step Formsに乗り換え
⇒なんか不具合あるので使うのやめる
⇒自作確認画面を導入
自作している人の記事を見ると、javascript(jQuery)とCSSだけで実装しているので簡単に確認画面を表示できることがわかります。
しかし、コードはフォーム依存になっており、確認画面のHTMLを用意する必要があって、汎用的には使えないものです。
そう考えるとフォームの内容に依存しないプラグインというのはありがたいものだと改めて思うのですが、自作しても動作確認は自分でする必要があり、結局は自己責任です。
だったらjQueryのContact form 7 add confirmの修正版でいいのではないかと思った次第です。
Contact form 7 add confirmもソースコードを見るとわかりますが、ほとんどがjavascriptですので、自作している確認画面とやっていることはそれほど違いはありません。
まとめ
保守の部分を無料で他人に丸投げしたいのはわかりますが、Contact form 7 add confirmの問題を避けるために安易にContact Form 7 Multi-Step Formsへの乗り換えを奨めている記事が多いです。
実は不具合多いのでビジネスサイトでは避けた方がよいです。
Contact form 7本体が対応してないし、今後も対応はしないと思うので、Contact form 7に確認画面を導入するにはプラグインでも自作でもjavascriptで実装することになります。
Contact form 7の仕様が変更になった時にはjavascriptを修正して追従していくのは同じです。
だれが責任もってやるかの違いだけです。
それが嫌なら、確認画面が使える無料のフォームであるSnow Monkey Formを使うのが良さそうです。
プラグインを複数組み合わせるから問題が起きるので、確認画面つきのフォームを使えば、互換性の問題は出ません。