例えば、100件のお店を紹介したブログサイトを作ったとします。
各お店へ問い合わせが出来るようにフォームを作ろうと思ったら、どうしますか?
項目は同じですが、送信先が違うので、100件分フォームを作らなければなりません。
それは、ちょっと面倒ですよね。
遷移元の値をPOSTでContactForm7に渡して、カスタムフィールドに登録したアドレスに送信する方法を紹介します。
POSTを使用して値を渡す
GETを使えば、簡単に値を渡すことが出来ますが、値の内容がURLに表示されてしまいます。
メールアドレスはさすがに表示したくないので、POSTで渡すことにします。
フォームページへ値を渡すためのフォームを記述します。
カスタムフィールド「shop_name」「shop_email」に「店名」「メールアドレス」を登録するものとします。
<form method="post" action="<?php echo esc_url(home_url('order'));?>">
<input type="hidden" name="shop_name" value="<?php echo get_post_meta($post->ID, 'shop_name', true);;?>">
<input type="hidden" name="shop_email" value="<?php echo get_post_meta($post->ID, 'shop_email', true);?>">
<input type="submit" value="お問い合わせ">
</form>
POSTの値を受け取る
遷移元から渡されたPOSTの値を受け取って、ContactForm7で使えるようにします。
そのために、functions.phpにコードを追記します。
■functions.php
function my_form_tag_filter($tag){
if ( ! is_array( $tag ) ){
return $tag;
}
if(isset($_POST['shop_name'])){
$name = $tag['name'];
if($name == 'shop_name'){
$tag['values'] = (array) $_POST['shop_name'];
}
}
if(isset($_POST['shop_email'])){
$name = $tag['name'];
if($name == 'shop_email'){
$tag['values'] = (array) $_POST['shop_email'];
}
}
return $tag;
}
add_filter('wpcf7_form_tag', 'my_form_tag_filter', 11);
上記のようにコードを追記することで、POSTで渡す値がContactForm7のオリジナルのタグとして使用できるようになります。
ContctForm7で値を使用する
実際にオリジナルのタグをContacForm7で使ってみましょう。
フォームテンプレートの作成
「フォーム」タブでフォームのテンプレートにオリジナルのタグを追記します。
<label> 店名
[text shop_name readonly] </label>
<label> 氏名
[text* your-name autocomplete:name] </label>
<label> メールアドレス
[email* your-email autocomplete:email] </label>
<label> 題名
[text* your-subject] </label>
<label> メッセージ本文 (任意)
[textarea your-message] </label>
[hidden shop_email]
[submit "送信"]
これで「店名」はテキストフィールドに、メールアドレスは非表示フィールドに格納されました。
[text shop_name readonly]
上記のように「readonly」を付け加えることで、編集できないテキストフィールドにすることが出来ます。
間違って消されてしまわないように、念のため「readonly」を付けました。
メールテンプレートの作成
次に「メール」タブでメールのテンプレートを作成します。
送信先に[shop_email]と記述します。これで、カスタムフィールドのアドレスにメール送信できるようになります。
「,」カンマで区切れば複数のアドレスに送ることができますので、お店と自分の2か所に送るようにしました。
■送信先:
[shop_email],[_site_admin_email]
メッセージ本文は必要に応じて作成してください。
■メッセージ本文:
店名:[shop_name]
お名前:[your-name]
メールアドレス:[your-email]
メッセージ本文:[your-message]
まとめ
ContactForm7を使って、カスタムフィールドに登録したアドレスに送信する方法を紹介しました。
遷移元の値をPOSTでContactForm7に渡してあげれば、フォーム一つ、テンプレートも一つで済むようになります。