確認画面をつけるプラグインも同時に使用している場合、_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
配列には、recipient
、from
、subject
、body
などの主要プロパティが定義されています。
subject | メールの件名 |
body | メールの本文 |
recipient (To) | メールの送信先アドレス |
sender (From) | メールの送信元アドレス |
カスタムヘッダー(Reply-To
、CC
、BCC
など)を追加するための公式な手段は、additional_headers
プロパティを使うようです。
参考にしたサイト