Как отправить форму Contact Form 7 нескольким получателям на основе введенных данных?

7 дек. 2016 г., 10:40:17
Просмотры: 24.4K
Голосов: 4

Мы проводим конкурс, где нам нужно отправлять письма на email-адреса, которые вводятся в форме. Для этого я использую Contact Form 7.

Я думал, что это будет просто, но форма не принимает такой синтаксис:

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

В полях To или Bcc.

Я думаю, что решением может быть жестко закодированное значение в поле To с последующей его перезаписью через хук, но я не могу определить, какой именно фильтр/хук следует использовать.

Буду благодарен за любую помощь.

0
Все ответы на вопрос 1
7

Нет необходимости писать код, так как Contact Form 7 имеет функцию "Дополнительные заголовки" в разделе Mail. Вам просто нужно ввести заголовок письма в текстовое поле "Additional headers" во вкладке Mail (вторая вкладка).

Вставьте это в текстовое поле "Additional headers":

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

Дополнительные заголовки в Contact Form 7

ИЛИ

Вы можете изменить данные заголовка письма с помощью хука wpcf7_before_send_mail. Попробуйте следующий код:

add_action('wpcf7_before_send_mail','dynamic_addcc');

function dynamic_addcc($WPCF7_ContactForm){

    // Проверяем ID контактной формы.
    if (33 == $WPCF7_ContactForm->id()) {

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

        if ($contactformsubmition) {

            $cc_email = array();

            /* -------------- */
            // замените на имена ваших полей с email
            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']);
            }
            /* -------------- */

            // Разделяем все email запятыми.
            $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";
            }

            // Сохраняем тело письма
            $currentformInstance->set_properties(array(
                "mail" => $mail
            ));

            // Возвращаем текущий экземпляр CF7
            return $currentformInstance;
        }
}
}

Хук wpcf7_before_send_mail срабатывает перед отправкой письма, позволяя вам изменить данные формы.

7 дек. 2016 г. 11:00:36
Комментарии

Это приводит к синтаксической ошибке

mikemike mikemike
7 дек. 2016 г. 11:06:31

сделать все эти поля email обязательными, @mikemike

GKS GKS
7 дек. 2016 г. 11:14:53

Но они не обязательные :(

mikemike mikemike
7 дек. 2016 г. 11:15:39

все email внутри Cc: должны быть указаны, иначе будет выдана ошибка,

GKS GKS
7 дек. 2016 г. 11:19:21

Да, поэтому я и задал вопрос

mikemike mikemike
7 дек. 2016 г. 11:20:23

@mikemike я обновил свой ответ, замените на ID вашей контактной формы и имена полей.

GKS GKS
7 дек. 2016 г. 12:14:13

что должна возвращать вся функция? Судя по коду, она может что-то вернуть только если $contactformsubmition равен true. А что если $contactformsubmition не true?

Karue Benson Karue Karue Benson Karue
30 мая 2020 г. 18:41:29
Показать остальные 2 комментариев