WordPressでメールフォームを真面目に考える。

少し前にメールフォームのデザインをBootstrap4で用意し始めたが、そろそろ完成させたい。

前回:WordPress +bootstrap4で業務用メールフォームを作る。

要件定義としてはこんな感じ

  1. テーマとしてお問合せフォームを内包させたい。
  2. 例外処理(途中からアクセス・ブラウザ更新)も対応したい。
  3. 入力フォームから確認画面を入れたい。
  4. 送信済み後のリダイレクトかX秒後にトップページに戻したい。
  5. 確認画面のファイルは他のお問合せフォームと共有で使えるようにしたい。
  6. メール送信はWordPressの関数を利用したい。
  7. セキュリティ上の対応もしたい。
  8. 可能であればメール送信の情報をDBに格納したい。

さて、まずは流れ。

普通に考えればこんな感じだが……

内部的には

ここで普通に考えると、

  1. その画面でブラウザの更新されたらどうするか?
  2. ショートコードは利用するか?

ショートコードはWordPressを利用している以上は必要だろうな。

 

バリデーションは後にして、まずは入力フォームを用意

コードは、テンプレートページを用意しておく。

次に確認画面を用意。

※下の追記してあるが、固定ページに入れる事に。
 迷走の記録して残しておく(´・ω・)

<form id=”form_1″ name=”form” method=”post” action=”/確認画面.php” class=”container”>
これを確認用に<?php echo get_template_directory_uri(); ?>でテンプレート先を指定して、confirm.phpにしてみる。

テンプレートとして読み込まないとダメなのか。
固定ページを作ってもいいが、直接テンプレート内のファイルを読みに行かせる方法はないものか。パースしてるか面倒か。
分解して考えると、

1.入力フォームからPOSTされた場合、任意のテンプレートファイルを利用する。
2.テンプレートファイルの選択はfunction.phpで指定できる。
3.じゃ、入力フォームというのはどうやって判別するのか?

 

@see 条件に応じてテンプレートファイルを変更する
http://morilog.com/wordpress/tips/custom_template_include/

 

この条件が分からない……というか決められない。
実際に動いているならお問合せっていうカテゴリーがあれば、それで行けるが、
じゃ、カテゴリーはIDとスラッグ、つまり投稿なら行けるが、
固定ページがページ名だと1つかできないな。なんとか自動でテンプレートを振り分ける方法があれば、
つまりこの条件なら確認画面にテンプレートを使うというのが条件をfunction.phpか振り分けしきゃならない。

Google先生に聞くか。

 

@see
適切なテンプレートファイルを用意してテンプレート内の振り分け処理を無くす
https://elearn.jp/wpman/column/c20111018_01.html

WordPress の single.php を投稿フォーマットで振り分ける方法
http://designhack.slashlab.net/post-format-specific-single-php-template-in-wordpress/

パラメータでシングルページのテンプレートを変更
https://dogmap.jp/2011/02/01/single-template-switch/

 

あれ?どっちにしろ入力フォームに固定ページつくって テンプレートを使うなら、
別に自動振り分けじゃなくてもいいじゃ???そうだな。では、固定ページを作り出す?
いやそうすると、

確認画面は自動でアクション先は毎回入れ込む形か……ん、プラグインにすればいいのだろうが。
今回は無し(´・ω・)

WordPressでFormを用いてPOSTすると404になる問題
http://qs.nndo.jp/2017/01/16/28/

 

確認画面

 

 

送信画面

あとは整形すればいいいか。

スパム対策とか更新とか途中アクセスからの閲覧対策

この送信画面に直接アクセスされると、それだけメールが送信されてしまう。それは制限させたい。
まずは条件を箇条書きに

 

  1. 確認・送信画面に直接アクセスされるのを制限したい。
  2. 確認画面からアクセスに限定
  3. 確認・送信画面に直接アクセスされたらトップページに即リダイレクト

またGoogle先生に聞こう

@
たった2行でメールフォームにスパム対策

URLで判別か。

問い合わせフォームからのスパムメールをたった3行のコードで撃退するシンプルな方法
https://tsukuru-blog.com/form-anti-spam-jquery/
こちらはロボット対策でHTMLの内容を変更するやり方

これはスパム対策。

簡単に思いつくのは、そのページ以外から来たらリダイレクトさせるやり方。これなら問題がないか。
hidden値はURLと確認画面にいくだけだから問題ないだろう。あとはここでHTMLのパースを実施。

まずは入力フォームの部分に。

Bootstrapのせいか、表示されてしまうのでclass=”d-none” のクラスを追加。

躓き:検索して引っ張て来たコードでダブルクオーテーションが違った。

 

雑だが、

こちらでリダイレクトしておく。

次にセッションだが、php セッションスタート 後 リダイレクト

送信画面は

次に確認画面。
ここを汎用化しておく。

まず来ている値をそのまま表示させる。

【汎用で確認画面は無理と判断】

 

 

 

 

 

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA