たとえば、席数が決まっているセミナーの参加申し込みの受付をContact Form 7 でおこない、受け付けたら(問い合わせメール送信後)残席数を1つ減らしたい、という要件の対応方法について。
通常セミナーなどの申込みフォームの場合、そのフォームはそれぞれのセミナー情報に紐づくものではなく、1つのフォームに値を渡しておこなわれると思います。
GET値をContact Form 7に渡してフォームに埋め込む
に記事がありますので、まずはそれを参考にGET値をContact Form 7に渡すところまでおこないましょう。
例として以下のようにsmnという変数でURLに記事IDを付け、フォームからメールが送信されたらその記事IDを持つセミナーのカスタムフィールド“semi_seat”の値を1つ減らしてみます。
http://domain.com/form/?smn=60
まず、上の記事にもありますが、GET値をContact Form 7に渡すプログラムを functions.php に以下のように記述します。
function kaiza_form_tag_filter($tag){ if ( ! is_array( $tag ) ) return $tag; if(isset($_GET['smn'])){ $postid = htmlspecialchars($_GET['smn']); $name = $tag['name']; if($name == 'postid') $tag['values'] = (array) $postid; } return $tag; } add_filter('wpcf7_form_tag', 'kaiza_form_tag_filter', 11);
次にContact Form 7で作成するフォームに次の記述をします。
[hidden postid]
hiddenはContact Form 7のタグのひとつで、type=”hidden”と同義です。
したがって表示はされません。
そして、このpostidの値をIDに持つセミナーのカスタムフィールド(今回もアドバンストカスタムフィールドを利用した場合の書き方です)“semi_seat”の値を1つ減らす処理を、functions.phpに記述します。
add_action('wpcf7_mail_sent', 'kaiza_wpcf7_update_field', 10, 1); function kaiza_wpcf7_update_field(){ $submission = WPCF7_Submission::get_instance(); if ( $submission && $_POST['_wpcf7c'] ==='step2') { $formdata = $submission->get_posted_data(); $postid = $formdata['postid']; $count = (int) get_field('semi_seat',$postid); $count--; // update update_field('semi_seat', $count,$postid); } }
なお、5行目の
&& $_POST['_wpcf7c'] ==='step2'
は、プラグイン「Contact Form 7 add confirm」を使用してフォーム確認画面を出力する場合に必要になる記述です。
「Contact Form 7 add confirm」を使用しない場合は必要のない記述です。
ひと通り駆け足で説明しましたが、これで、Contact Form 7でメールが送信された後、カスタムフィールド“semi_seat”の値を1つ減らすことができるようになりましたよと。
セミナー運用がより効率的になりますね。
※ 一緒に読んだ方が良い記事はこちら
GET値をContact Form 7に渡してフォームに埋め込む
GET値を contact form 7 に渡してプルダウン項目を選択状態(selected)にする
GET値を contact form 7 に渡してチェックボックス項目を選択状態にする