Contactform7のユーザーから渡されたデータをもとにデータを変更して、メール文章に反映させる方法

study_chinese 仕事

WordPressで以下のようなことがしたかった。

会員向けにオンラインセミナーを開くためにコンタクトフォームを利用して、申し込みをさせて、
申し込みをしてきた人のもとにメールでオンラインセミナーのURLを送るという仕組みです。

毎月開催されるので、オンラインセミナーのURLは毎月変更されるのですが、
コンタクトフォームのメールの文章に動的にオンラインセミナーのURLを発行する必要がありました。

カスタム投稿タイプで、「seminar」を準備して、ACFで、カスタムフィールドを追加して、オンラインセミナーのURLを登録するようにしました。

その投稿ページを開くと、セミナー申し込みのコンタクトフォーム7があるのですが、

hiddenでオンラインセミナーのURL渡すのは嫌だったので、post idをhiddenで渡して、

メールの送信前にそのhiddenで渡されたpost idをもとにオンラインセミナーのURLを取得して、メールの文章に渡すという仕組みにしました。

フックしたのはこの関数「wpcf7_before_send_mail」


add_action("wpcf7_before_send_mail", "wpcf7_replace_secret_id");
function wpcf7_replace_secret_id($WPCF7_ContactForm)
{
  // もしフォーム毎に処理を変えたいならid()をチェック
  if (3332 == $WPCF7_ContactForm->id()) {  //3332はコンタクトフォームのID
    $wpcf7 = WPCF7_ContactForm::get_current();
    $submission = WPCF7_Submission::get_instance();
    if ($submission) {
      $data = $submission->get_posted_data();
      $pgid = $data['post-id'];
      $semi_url  = get_field('seminar_url', $pgid);
      $mail = $wpcf7->prop('mail_2'); // もし「メール2」の方を使うなら$mail = $wpcf7->prop('mail_2');
      // メール本文中の[secret-id]を$secretIDで置換
      $mail['body'] = str_replace('[post-id]', $semi_url, $mail['body']);
      $wpcf7->set_properties(array(
        "mail_2" => $mail // "mail_2" => $mail
      ));
      return $wpcf7;
    }
  }
}
参考サイト

コメント

タイトルとURLをコピーしました