Cum să alegi destinatarul emailului în Contact Form 7 în funcție de statul introdus în formular și să salvezi în baza de date
Situație
Când un vizitator completează un formular pe site, acesta introduce:
- Nume
- 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.

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ă).
