Cum pot trimite către mai mulți destinatari în Contact Form 7 pe baza datelor din formular?

7 dec. 2016, 10:40:17
Vizualizări: 24.4K
Voturi: 4

Organizăm un concurs în care trebuie să trimitem emailuri către adresele de email introduse într-un formular. Folosesc Contact Form 7 pentru aceasta.

Am crezut că va fi simplu, dar formularul nu acceptă sintaxa:

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

În câmpurile To sau Bcc.

Cred că soluția ar putea fi să setez o valoare fixă în câmpul To și apoi să o suprascriu cu un hook, dar nu-mi dau seama care ar fi acel filtru/hook.

Orice ajutor este apreciat.

0
Toate răspunsurile la întrebare 1
7

Nu este nevoie să scrieți niciun cod, Contact form 7 are funcționalități de Anteturi Adiționale în secțiunea Mail. În aceasta, trebuie doar să scrieți antetul e-mailului în caseta de text Anteturi adiționale din secțiunea Mail (a doua filă).

Puneți acest text în caseta de text Anteturi adiționale.

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

imagine cu secțiunea Mail din Contact Form 7

SAU

Puteți modifica datele antetului e-mailului prin hook-ul wpcf7_before_send_mail. Încercați codul de mai jos.

add_action('wpcf7_before_send_mail','dynamic_addcc');

function dynamic_addcc($WPCF7_ContactForm){

    // Verifică ID-ul formularului de contact.
    if (33 == $WPCF7_ContactForm->id()) {

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

        if ($contactformsubmition) {

            $cc_email = array();

            /* -------------- */
            // înlocuiți cu numele câmpurilor de e-mail
            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']);
            }
            /* -------------- */

            // separă toate e-mailurile prin virgulă.
            $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";
            }

            // Salvează corpul e-mailului
            $currentformInstance->set_properties(array(
                "mail" => $mail
            ));

            // returnează instanța curentă a cf7
            return $currentformInstance;
        }
}
}

Hook-ul wpcf7_before_send_mail rulează înainte de trimiterea e-mailului, puteți modifica datele formularului.

7 dec. 2016 11:00:36
Comentarii

Aceasta are ca rezultat o eroare de sintaxă

mikemike mikemike
7 dec. 2016 11:06:31

faceți ca toate câmpurile de e-mail să fie obligatorii, @mikemike

GKS GKS
7 dec. 2016 11:14:53

Dar ele nu sunt obligatorii :(

mikemike mikemike
7 dec. 2016 11:15:39

toate adresele de email din Cc: trebuie să fie prezente, altfel va genera o eroare,

GKS GKS
7 dec. 2016 11:19:21

Da, de aceea am întrebat

mikemike mikemike
7 dec. 2016 11:20:23

@mikemike Am actualizat răspunsul meu, înlocuiește cu ID-ul formularului tău de contact și numele câmpurilor.

GKS GKS
7 dec. 2016 12:14:13

ce ar trebui să returneze întreaga funcție? Din ceea ce văd în cod, poate returna ceva doar când $contactformsubmition este adevărat. Ce se întâmplă dacă $contactformsubmition nu este adevărat?

Karue Benson Karue Karue Benson Karue
30 mai 2020 18:41:29
Arată celelalte 2 comentarii