web-dev-qa-db-ja.com

フォーム入力に基づいて複数のContact Form 7受信者に送信するにはどうすればいいですか?

私たちは、フォームに入力されたEメールアドレスにEメールを送信する必要があるという競争を行っています。これを行うにはContact Form 7を使用しています。

これは簡単だと思いましたが、フォームは次の構文を受け入れません。

[friend1-email], [friend2-email], [friend3-email], [friend4-email], [friend5-email]

ToまたはBccフィールドに。

解決策は、Toフィールドの値をハードコードしてからフックで上書きすることではないかと思いますが、そのフィルター/フックがどうなるかわからない。

任意の助けをいただければ幸いです。

2
mikemike

コードを記述する必要はありません。Contactform 7のMailセクションには追加ヘッダーの機能があります。そのため、Mail(Second Tab)セクションのAdditional headersテキストボックス内にメールのヘッダーを書き込むだけです。

これを「追加ヘッダー」テキストボックスに入れます。

Cc: [friend1-email], [friend2-email], [friend3-email], [friend4-email], [friend5-email]

enter image description here

OR

フックwpcf7_before_send_mail try以下のコードでメールヘッダーデータを変更できます。

add_action('wpcf7_before_send_mail','dynamic_addcc');

function dynamic_addcc($WPCF7_ContactForm){

    // Check contact form id.
    if (33 == $WPCF7_ContactForm->id()) {

        $currentformInstance  = WPCF7_ContactForm::get_current();
        $contactformsubmition = WPCF7_Submission::get_instance();

        if ($contactformsubmition) {

            $cc_email = array();

            /* -------------- */
            // replace with your email field's names
            if(is_email($_POST['friend1-email'])){
                array_Push($cc_email, $_POST['friend1-email']);
            }
            if(is_email($_POST['friend2-email'])){
                array_Push($cc_email, $_POST['friend2-email']);
            }
            /* -------------- */

            // saparate all emails by comma.
            $cclist = implode(', ',$cc_email);

            $data = $contactformsubmition->get_posted_data();

            if (empty($data))
                return;

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

            if(!empty($cclist)){
                $mail['additional_headers'] = "Cc: $cclist";
            }

            // Save the email body
            $currentformInstance->set_properties(array(
                "mail" => $mail
            ));

            // return current cf7 instance
            return $currentformInstance;
        }
}
}

wpcf7_before_send_mailフックは、電子メールの送信前に実行され、フォームデータを変更できます。

6
Govind Kumar