contact form7 ラジオボタンの選択によって送信先、返信先変更

WordPress
スポンサーリンク

確認画面をつけるプラグインも同時に使用している場合、_row_をつけてする方法で表示されなかったため、別の方法でチャレンジ。

悪戦苦闘しながら、なんとかカスタマイズできました。contact formのカスタマイズは難しい!今回ありがたく、別の方のブログが大変参考にさせてもらったので、こういう設定が必要な方にむけて残しておこうと思います。

ラジオボタンの選択によって送信先メールを変える方法

管理者宛の送信メールアドレス分岐


add_action( 'wpcf7_before_send_mail', 'custom_change_send_mail_target' );

/**
 * メール送信前に実行されるアクションフック
 * メール送信先を変更する
 */
function custom_change_send_mail_target($contact_form) {
    // WPCF7_Submission のインスタンスを取得、ここに投稿されたデータ関係の情報が入ってる
    $submission = WPCF7_Submission::get_instance();

    if ($submission) {
        // 投稿されたデータを取得
        $posted_data = $submission->get_posted_data();

        if (isset($posted_data['radio-select'])) {
            // radio-selectの値に基づいて送信先を変更
            $send_target_value = $posted_data['radio-select'];

            // メールの設定を取得(ここではメール1の設定を変更)
            $mail = $contact_form->prop('mail');  // メール1の設定

            // メールの送信先を設定
            if ($mail) {
                if ($send_target_value == '選択1') {
                    $mail['recipient'] = 'info@select01.com';  // 選択1の場合の送信先
                } elseif ($send_target_value == '選択2') {
                    $mail['recipient'] = 'info@select02.com';  // 選択2の場合の送信先
                } else {
                    $mail['recipient'] = 'info@select03.com';  // それ以外の場合の送信先
                }

                // メール設定を更新
                $contact_form->set_properties(array('mail' => $mail));
            }
        }
    }
}
add_action( 'wpcf7_before_send_mail', 'custom_change_send_mail_target' );

↑このフックは、メールが送信される前に実行される

$submission = WPCF7_Submission::get_instance()

↑送信されたフォームの情報を取得する(全体)

$posted_data = $submission->get_posted_data()

↑実際にユーザーがフォームに入力したデータを取得(配列)

 if (isset($posted_data['radio-select'])) {

↑ラジオボタンの選択内容による条件分岐。ここでissetにするのは、他のフォームに影響が出ないようにするためと理解。(radio-selectがあった場合+選択1の場合、それ以外)

$mail = $contact_form->prop('mail');

↑mail(管理者宛て)の設定が取得され、メールの内容を変更できるようになる。

※mail_2(ユーザー宛ての自動返信の方)

私はここも結構つまずきました。管理者あてなのに、ずっとmail_2を使ってできずにいました。

if ($mail) {
                if ($send_target_value == '選択1') {
                    $mail['recipient'] = 'info@select01.com';  // 選択1の場合の送信先
                } elseif

↑ラジオボタンの選択内容に基づいて、返信先アドレスを変更

$contact_form->set_properties(array('mail' => $mail));

↑mailの内容を更新して保存するコード

ラジオボタンの選択によって返信先メールを変える方法


ユーザー宛  (reply-to)メールアドレス分岐

add_action( 'wpcf7_before_send_mail', 'custom_reply_to_based_on_radio_order' );

function custom_reply_to_based_on_radio_order( $contact_form ) {
    // WPCF7_Submission のインスタンスを取得
    $submission = WPCF7_Submission::get_instance();

    if ( $submission ) {
        // 投稿されたデータを取得
        $posted_data = $submission->get_posted_data();

        // ラジオボタンの値を取得
        if ( isset( $posted_data['radio-order'] ) ) {
            $send_target_value = $posted_data['radio-order'];

            // ユーザー宛てメールの設定を取得
            $mail_2 = $contact_form->prop( 'mail_2' );

            if ( $mail_2 ) {
                // ラジオボタンの選択肢によって返信先アドレスを変更
                if ( $send_target_value[0] == '選択1' ) {
                    $reply_to_address = 'info@select01.com';
                } else {
                    $reply_to_address = 'info@select02.com';
                }

                // メールのヘッダーに Reply-To を追加
                $mail_2['additional_headers'] .= "Reply-To: {$reply_to_address}\n";

                // メール本文に返信先アドレスを挿入
                $mail_2['body'] .= "\n\n【返信先メールアドレス】\n{$reply_to_address}";

                // 設定を保存
                $contact_form->set_properties( array( 'mail_2' => $mail_2 ) );
            }
        }
    }
}

大体、上の送信先のと同じ書き方ですが、違うところだけ取り出してみます。

$mail_2 = $contact_form->prop( 'mail_2' );

↑mail_2(ユーザー宛ての自動返信の方)の設定が取得され、メールの内容を変更できるようになる。

※mail(管理者宛ての送信の方)

 $reply_to_address = 'info@select01.com';
$mail_2['additional_headers'] .= "Reply-To: {$reply_to_address}\n";

additional_headers を使って、返信先 (Reply-To) を追加しています。既存の additional_headers に値を追加しているので、他のヘッダーが上書きされることなく、新しい Reply-To が追加されます。

additional_headers を使用し、他のヘッダーに影響を与えずに Reply-To を追加しています。(.=は追加するコードです。)

 $mail_2['body'] .= "\n\n【返信先メールアドレス】\n{$reply_to_address}";

↑メール本文の最後に追加する用のコードです。私は使いませんでしたが、必要でしたら本文の最後ににも載せられます。下記が例です。

【返信先メールアドレス】info@select01.com

contact form7のプロパティについて

Contact Form 7$mail 配列には、recipientfromsubjectbody などの主要プロパティが定義されています。

subjectメールの件名
bodyメールの本文
recipient (To)メールの送信先アドレス
sender (From)メールの送信元アドレス

カスタムヘッダー(Reply-ToCCBCC など)を追加するための公式な手段は、additional_headers プロパティを使うようです。

参考にしたサイト

Contact Form 7で、入力項目に応じてメールの内容や送信先を変える - Qiita
Wordpressのお問い合わせフォーム実装で、Contact Form 7というプラグインを利用したときの備忘録です。このプラグインはデフォルトでは確認画面がないため、合わせてContact F…
タイトルとURLをコピーしました