WordPressカスタマイズ事例

Contact Form 7 で問い合わせメール送信後に、カスタムフィールドの値を更新する

たとえば、席数が決まっているセミナーの参加申し込みの受付を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に渡すプログラムを function.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つ減らす処理を、function.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つ減らすことができるようになりましたよと。
セミナー運用がより効率的になりますね。


関連するWordPressカスタマイズ事例