【WP/contact form 7】$_POST変数の中身で判定して、『メール送信ありがとうページ』に遷移させる方法
更新: 2022/04/26 2845文字

今回は、WordPressのお馴染みプラグイン『contact form 7』を取り上げます。便利とはいえ、『送信後の機能(転送や表示)が微妙』みたいな難点があります。そのうちの一つ『送信後、メール送信ありがとうページへの遷移』を取り上げます。ちょっとテクニカルに『$_POST』を判定します。さっそく確認していきましょう。
目次
WP/contact form 7の、送信後の問題点っぽいポイント
さて、先日・・
こういうのをtwitterに投下していた管理人です。当時、お取引先さまと『メール送信ありがとうページ』のことを話していたほか、contact form 7プラグインで『微妙じゃね?』って気になっていたことがあったわけです。その内容は以下の通りです。
『on_sent_ok』が、新しいバージョンでは廃止されている
contact form 7で、送信後に『ページ移動』をされるときによく使われていたものが、『on_sent_ok』でした。urlを指定して、送信成功後に任意のページにリダイレクトできました。
しかし、現在バージョンではこれを書くとエラー警告が出るうえ、廃止がアナウンスされました。非推奨機能を使っていて、なんかエラーとか出たら大変ですからね。
■on_sent_ok は廃止されます(contactform7)
https://contactform7.com/ja/2017/06/07/on-sent-ok-is-deprecated/
response表示が味気ない(人によります)
あとは、デフォルトでついてきている機能、response。メッセージを管理画面から変更するほか、タグで位置を調整したり、CSSを追加したりするカスタマイズは行われますが・・・
味気ない&文字サイズによっては、送信完了がわかりにくいかもしれません。
WP/contact form 7で送信したときの$_POSTの中身
で、『メール送信ありがとうページをつけてみる』ということで、転送判定に使えそうなものを見つけました。『contact form 7で送信したときの$_POST』です。確認のしかた方はカンタンで、PHPファイル部分に『var_dump($_POST);』を書いて、メールを送信するだけ。
こんな感じで配列が出てきます。例えば『電話番号の欄にアルファベット入れた』や『必須フィールドが入っていない』という場合はメールが送られていないけど、途中まで入力した内容自体は、$_POSTに格納されています。
フォームのバージョン(key:_wpcf7_version)やid(key:_wpcf7)みたいなメタ情報は空でも出てくるけど、ユーザー入力内容が入る部分が『your-name,your-email,your-subject,your-message』です。これは、このサイトのメールフォームで指定した内容です。POSTメソッドについては、以下のリンクもご確認ください。
■POSTメソッド 【POST method】(IT用語辞典 e-Words)
https://e-words.jp/w/POSTメソッド.html
contact form 7の$_POST変数の中身で判定して、『メール送信ありがとうページ』に遷移させる方法
まずは、送信後の飛び先になるページを作っておく
こんな感じで、このサイトのテスト用ディレクトリに、適当にhtmlファイルをアップして、『メール送信ありがとうページ』を作っておきます。少し変化をつけるためにイラストを使いました。
なお、画像はイラストACさんよりお借りしました。描ける人は、自分で描いても楽しいでしょう。オリジナル感の強いサイトになりますしね。
フォームを準備し、判定に使うタグ名を押さえておく
そのあとは、管理画面からフォームを準備します。textなどの後についている『*』は、必須項目という意味です。今回はシンプルに、『入力必須のyour-name,your-subject,your-messageの3項目が入力されていた場合、送信されたと判定』というような条件を入れてみましょうか。
(*実際に運用する場合は『メールアドレスや電話番号形式をpreg_matchでチェック』『フォームに桁数制限』『半角カナなどのチェック』『記号などをハネる』のように、ページ遷移条件が複雑になります。)
条件にマッチしたときに、転送プログラムが出力されるようにする
カンタンに説明すると、
『記事idが9309番(この記事)』かつ(&&)
『$_POSTが空ではない(!は否定演算子)』かつ
『必須のyour-nameが空ではない』かつ
『必須のyour-subjectが空ではない』かつ
『必須のyour-messageが空ではない』
という条件で、ページ遷移スクリプトが出力されます。これで『on_sent_ok』無しでも送信後移動ができるはず。
ただし、PHPのemptyは、$var=0などもtrue判定となるようです。0が選択肢になる場合は気をつけたほうがいいかも。
■empty(PHPマニュアル)
https://www.php.net/manual/ja/function.empty.php
WP/contact form 7転送、実際に使ってみましょう
こちらはテスト用なので、メールアドレス入力欄はつけませんでした(送信ボタンを押しても、返信メールは届きません)。とりあえず適当に入力して、3つのフィールドが埋まれば、遷移するという点をご確認ください。
あとがき・まとめ
- contact form 7の『on_sent_ok』は、新しいバージョンでは廃止
- response表示はあるけど、少し味気ない
- $_POST変数のユーザー入力フィールドで判定して、メールありがとうページに飛ばすことができる
まとめると、このようなところでしょうか。実際の運用の場合は、安全面や、わけわからない飛び方を避ける点を考えて、条件を複雑にします。 (エスケープ処理とかも慣れてくると、自分でフォーム作ったほうが早いような気が、しないでもないです笑)

【カテゴリ】 - webサイト制作関連, WordPressプラグイン情報
【タグ】 - PHP, URLの転送, WordPress