WordPress 2.5 でも使えるコンタクトフォームプラグインは数多くありますが、当サイトでは、Contact Form 7 Plugin を使わせていただくことにしました。
比較的わかりやすい設定ですし、デフォルトでもそこそこ使えるので重宝しているわけですが、どうしてもメール本文中に、送信日時や、送信者のUA情報などを含めたいと考えました。しかし、上記ページ中のコメント欄にあるとおり、デフォルトの機能の中にはそういった機能はついていません。
というわけで、ちょっとだけいじってみたところ、とりあえずうまくいったので公開してみます。あくまでこのプラグインを使いつつ、どうしても利用者情報が欲しいという場合の応急処置であること、利用に関しては自己責任、ということでお願いします。また、この情報は2008年4月20日現在の最新版である、7.1.7.7 を対象にしています。
function mail_callback($matches) {
if (isset($_POST[$matches[1]])) {
$submitted = $_POST[$matches[1]];
if (is_array($submitted))
$submitted = join(', ', $submitted);
return stripslashes($submitted);
} else {
return $matches[0];
}
}
wp-contact-form-7.php の160行目付近の上記 function を、下記のように修正します。
function mail_callback($matches) {
if (isset($_POST[$matches[1]])) {
$submitted = $_POST[$matches[1]];
if (is_array($submitted))
$submitted = join(', ', $submitted);
return stripslashes($submitted);
} else {
// メール送信時に定数(っぽいもの)を追加
if ( $matches[1] === 'WPCF7_SEND_DATE'){return date("Y/m/d G:i:s T");}
if ( $matches[1] === 'WPCF7_SEND_UA') {return $_SERVER['HTTP_USER_AGENT'];}
if ( $matches[1] === 'WPCF7_SEND_HOST'){return $_SERVER["REMOTE_HOST"] ? $_SERVER["REMOTE_HOST"] : $_SERVER["REMOTE_ADDR"];}
return $matches[0];
}
}
これにより、管理画面でメールのメッセージ本文のテキストエリアに、[WPCF7_SEND_DATE]、[WPCF7_SEND_UA]、[WPCF7_SEND_HOST]を加えることで、メールの本文中にそれぞれ、送信日時、ユーザーエージェント(ブラウザ)、送信元ホスト情報(サーバ名かIPアドレス)を出力することが可能になります。実際にはUSER_AGENTの出力には少し気を使ったほうがいいはずですが、お問い合わせという性質上、とりあえずこれで問題ないと思います(基本的に受け取るのは自分だけでしょ?)。もしセキュリティ的にこうしたほうが安全だ、というのがあれば教えていただけたら幸いです。
作者の方には特にコンタクトしないままいじってしまったのですが、とりあえず勝手処理、ということで。くれぐれもこの修正で生じた問題などで作者の方にご迷惑をおかけしないようにお願いします。
注意(よく読んでください)
- 本当に、作者の方に迷惑かけるのだけは止めてください。
- 自分の作業メモなので、これについてのサポートは勘弁してください。
- メッセージ本文でしかテストしていませんw タイトル欄やメールアドレスのところにこれらを設定することはないと思いますが、もし設定して何かよくないことが発生しても自己責任でお願いします(たぶんメールが送れないとかそういう目にあいます)。
- 定数名の WPCF7 部分を、適宜書き換えて使ってください。単にメール送信直前の処理で、値を置き換えているに過ぎません。もしハッキング目的でコレを悪用しようと思えば、例えば POST データに対して、この定数名でデータを送り込まれた場合、そのデータが優先されてしまいます(一応処理速度と自己設定優先で後ろに置いているので)。この意味がわからない場合は、この修正を行わないほうが無難です。
ついでだから利用者情報を取得したい主な理由とか書いておこうかな(コメント6093へのレスじゃないけどw)
- 入力されたメッセージ以外にも、情報を整形してコピーを送信者に返す場合に、送信日時は必要
- 受信したメールを元にやり取りを始める場合、受け取るメーラの種類によっては返信時に元の投稿日時を引き継がないものがある(なので日時が入ってると便利)
- UA情報を追加することで、単なる閲覧利用者ではなく、問い合わせをしてくれる利用者のUAの傾向を把握しやすくなる。それによりサイトのデザインやそのチェックの方向性を定めやすくなる
- 送信元ホスト情報は(たとえ気休めでも)セキュリティ向上に一役買う。また、いざという時に、IP-BANしやすくなる。
- まぁ、ぶっちゃけ友人に問い合わせのメールにそういうデータ入れたいんだけど、って言われちゃっただけなんだけどねw
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://officel.biz/wordpress/wp-contact-form-7-add-const.htm/trackback
- Listed below are links to weblogs that reference
- wp-contact-form-7 に簡単に定数(っぽいもの)をつける方法のメモ from Office L