Contact Form 7で入力値を利用した計算結果をメール文に表示する
こんにちは、ナカエです。
WordPressのContact Form 7利用時に、ユーザーがフォームに入力した値から何らかの計算をして結果をメールに表示したいということがたまにあります。
例えばある商品の購入数をフォームで入力させ、合計支払金額をメール文面に挿入するといった場合です。
もう少しユーザーフレンドリーなフォームを作ろうと思うと、入力をリアルタイムにJavascriptで処理してフォーム入力時に合計支払金額を表示できるといいかもしれませんね。
WordPressのContact Form 7利用時に、ユーザーがフォームに入力した値から何らかの計算をして結果をメールに表示したいということがたまにあります。
例えばある商品の購入数をフォームで入力させ、合計支払金額をメール文面に挿入するといった場合です。
フォームの動作
1.ユーザが商品の購入数をフォームに記入して送信
フォームの記入例
<p>お名前</p> [text* name placeholder "山田 太郎"] <p>メールアドレス</p> [email* email] <p>商品購入数</p> [number* amount min:1 "1"]個 <p>[submit "送信"]</p>
2.ユーザの入力した購入数を元に単価を5000円として合計支払金額を計算する
function.phpにContact Form 7 のフィルターをフックする処理を記述します(後述)3.メール中の[total-payment]とショートタグを記入した箇所に計算結果を表示
メッセージ本文の記入例
[name]<[email]>様より商品の注文があります。 【商品購入数】[amount] 個 【合計お支払金額】5,000円 × [amount] = [total-payment] 円実際に届くメールでの表示例
ネクスタット<customer@example.com>様より商品の注文があります。 【商品購入数】5 個 【合計お支払金額】5,000円 × 5 = 25,000 円
function.phpの記述
フックするのはwpcf7_special_mail_tagsというフィルターです。//実際の処理を書く関数。名前はご自由に。$name変数の条件分岐を増やせば複数のショートタグについて記述できます。 function my_special_mail_tags( $output , $name, $html) { $name = preg_replace( '/^wpcf7\./', '_', $name ); if('total-payment' == $name) { $amount = my_replace_tags('amount'); $amount = intval($amount); //整数値に $output = $amount * 5000; } return $output; } //フィルターにフック。第二引数は上の関数名 add_filter('wpcf7_special_mail_tags', 'my_special_mail_tags', 10 ,2); //ショートタグを置換する処理(変数名とメソッド名が長いContact Formの置換処理メソッドをラップしただけ) function my_replace_tags($tag_name) { global $wpcf7_contact_form; return $wpcf7_contact_form->replace_mail_tags('[' . $tag_name . ']'); }
もう少しユーザーフレンドリーなフォームを作ろうと思うと、入力をリアルタイムにJavascriptで処理してフォーム入力時に合計支払金額を表示できるといいかもしれませんね。