Cum să alegi destinatarul emailului în Contact Form 7 în funcție de statul introdus în formular și să salvezi în baza de date

28 ian. 2013, 09:30:08
Vizualizări: 19.8K
Voturi: 4

Folosind Contact Form 7

Situație

Când un vizitator completează un formular pe site, acesta introduce:

  • Nume
  • Email
  • Telefon
  • Adresă (Stradă, Oraș, Stat, Cod Poștal)
  • Mesaj

Trebuie să salvez aceste informații în baza de date pentru referințe viitoare și trebuie să trimit un email către o adresă centrală și către o adresă specifică, care se schimbă în funcție de statul vizitatorului.

Practic, agenții de vânzări au teritorii alocate și contactele de pe site trebuie trimise atât la adresa principală de email a site-ului, cât și la persoana responsabilă de teritoriu.

Nu toate statele au un agent de vânzări alocat.

Pași Efectuați

Am instalat Contact Form DB pentru a salva toate trimiterile în baza de date.

Folosesc metoda descrisă pe site-ul Contact Form 7 pentru a selecta destinatarul - Destinatar Selectabil cu Pipes. Folosesc numele statului ca dropdown selectabil și adresa de email a agentului de vânzări după pipe.

[select* state 
"Alabama|john@example.com"
"Alaska"
"Arizona|john@example.com"
"Arkansas|mary@example.com"
"California|mary@example.com"
"Colorado"
]

Am configurat "Mail" din CF7 să trimită către adresa centrală a site-ului și către adresa de email a agentului de vânzări care operează în statul selectat.

central@example.com,[state]

Problemele

Când un vizitator selectează un stat care are un agent de vânzări alocat, adresa de email a agentului este introdusă în baza de date, nu statul.

Când un vizitator selectează un stat care nu are un agent desemnat, numele statului este introdus în baza de date, dar nu se trimite niciun email.

Am încercat de asemenea să configurez "Mail" să trimită către central@example.com și "Mail (2)" să trimită către [state] (adresa agentului), însă niciun email nu a fost trimis către central@example.com când nu exista o adresă de email pentru statul selectat în dropdown.

În final, am încercat să introduc numele statului în acest format - "Alaska|". În acest caz, nimic nu a fost introdus în baza de date pentru state și niciun email nu a fost trimis. Am testat acest lucru folosind ambele opțiuni "Mail" menționate mai sus.

Soluția?

Acum, înțeleg că pot introduce simplu central@example.com pentru toate statele fără un agent desemnat - și asta e în regulă.

Problema cu această abordare - adresa de email este încă introdusă în baza de date pentru state.

Îmi imaginez că am nevoie de o modalitate de a lua numele statului ([_raw_state]) și de a-l transmite într-un câmp ascuns CF7, astfel încât să poată fi salvat în baza de date, dar nu reușesc să îmi dau seama cum.

0
Toate răspunsurile la întrebare 1
0

Mulțumiri lui Michael Simpson, de la Contact Form DB. Soluția este listată (cam ascunsă) pe site-ul Contact Form DB în articolul - Meniu CF7 cu Pipe-uri

Adăugați în functions.php

function myFilter($formData) {
// Schimbă $formData
return $formData; // asigură-te că o returnezi
}

add_filter('cfdb_form_data', 'myFilter');

function location_form_handler($formData)
{
$formName = 'ExtendedContact'; // schimbă asta cu numele formularului tău
$fieldName = 'state'; // schimbă asta cu numele câmpului tău
if ($formData && $formName == $formData->title && $formData->scanned_form_tags) {
    $emailSelected = $formData->posted_data[$fieldName];
    $valueSelected = null;
    foreach ($formData->scanned_form_tags as $tag) {
        if ($tag['name'] == $fieldName) {
            foreach ($tag['raw_values'] as $rawValue) {
                // valoare|email
                $valuesArray = explode('|', $rawValue);
                if (count($valuesArray) == 2 && $valuesArray[1] == $emailSelected) {
                    $valueSelected = $valuesArray[0];
                    break;
                }
            }
        }
        if ($valueSelected != null) {
            break;
        }
    }
    if ($valueSelected != null) {
        $formData->posted_data[$fieldName] = $valueSelected;
        $formData->posted_data[$fieldName . '_email'] = $emailSelected;
    }
}
return $formData;
}
add_filter('cfdb_form_data', 'location_form_handler');

Aceasta va crea o intrare în baza de date cu numele statului (câmpul dinaintea pipe-ului) ca state și un al doilea câmp (adresa de email după pipe) cu adresa de email asociată ca state_email.

În final, actualizați definiția formularului în Contact Form 7 astfel: [state_email]

NOTĂ

De asemenea, vreau să menționez, în cazul în care altcineva întâlnește această situație -

În formularul meu, vizitatorii care completează formularul selectează statul în care se află, apoi agentul de vânzări responsabil pentru acel stat primește emailul. De asemenea, aveam nevoie ca emailul să fie trimis și către o adresă de email centrală (corporativă).

Totuși, nu toate statele au un agent de vânzări asignat, întrucât compania se concentrează pe regiunea Mid-West.

Cu Contact Form 7, dacă adresa de email după pipe era goală, emailurile nu erau trimise deloc. Metoda prezentată de Michael permite de fapt un câmp gol după pipe.

Am configurat "Mail" în formular să trimită către adresa de email centrală și "Mail (2)" să trimită către agentul de vânzări (dacă există).

30 ian. 2013 00:28:35