ワードプレスのContact Form 7でメール送信直前に任意の処理を実行するプログラムをご紹介いたします。


Contact Form 7でメール送信直前に任意の処理を実行またはメール送信を中止するコード

Contact Form 7には様々な、割り込み処理であるフックが実装されています。

メール送信直前に実行されるフックはwpcf7_before_send_mail でこのフックを使用することによってメール送信直前に処理を実行したり、その処理によってメール送信を中止したりもできます。

実装例を下記にお示します。

function my_action_wpcf7_before_send_mail( $contact_form, &$abort ,$mailobj  ) { 
    $form_id = $contact_form->id();
   
    if($form_id==5){
        $submission = WPCF7_Submission::get_instance(); 
        $posted_data = $submission->get_posted_data();

        $name = $posted_data['your-name'];
        $email = $posted_data['email'];
        
        if(strpos($email,'yandex') !== false){
            $mailobj ->set_response("yandexからのメール送信は禁止されています「メール送信中止したときのメッセージ」");
            $abort = true;
        }
    }
}
add_action( 'wpcf7_before_send_mail', 'my_action_wpcf7_before_send_mail', 10, 3 );

サンプルコードの解説

1 まず $contact_form->id でこのお問い合わせフォームのIDを取得し そのIDが5の場合のみ処理を実行します。

2 $submission->get_posted_data() で送信されようとしているフォームの内容を取得します。送信内容は、フォームの設定で追加されたフォーム部品のキー値で $posted_data[‘キー値’];のような形で取得できます

3 if(strpos($email,’yandex’) !== false){ のコード部分でメールアドレスにyandexを含む場合メール送信を$abort = true;を代入することで中止します。

4 $mailobj ->set_response( で中止時に表示されるアラートのテキストを設定しています。

このコードはテーマのFunctions.phpなどに記載することで利用可能でございます。
下記のような用途でも使用できるかと存じます。

・メール送信時に何らかの外部APIと連携する
・メールアドレスや名前、そのほか任意のフォーム部品でより高度なエラー処理(バリデーション)を行う
・メールの内容を送信前に加工したり、データベースに保持させる

WordPress ワードプレスのプラグインのカスタマイズやAPI連携などのコーディングのご依頼・ご相談はWPドクターまでお気軽にお送りください