開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. CMS >
  4. WordPress >
  5. Contact Form 7で入力値を利用した計算結果をメール文に表示する
no-image

Contact Form 7で入力値を利用した計算結果をメール文に表示する

こんにちは、ナカエです。

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で処理してフォーム入力時に合計支払金額を表示できるといいかもしれませんね。
TOPに戻る