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;
}
}
}
参考サイト
コメント