Utilisation du formulaire de contact 7
Situation
Lorsqu'un visiteur remplit un formulaire sur le site Web, il entre:
Je dois sauvegarder ces informations dans la base de données pour référence ultérieure et envoyer un courrier électronique à une adresse électronique centrale et à une adresse électronique spécifique, qui varie en fonction de l'état du visiteur.
Fondamentalement, les vendeurs ont des territoires et les contacts du site Web doivent être envoyés à l'adresse électronique du site Web principal ainsi qu'à la personne en charge du territoire.
Tous les États n'ont pas un vendeur affecté.
Mesures prises
J'ai installé Contact Form DB pour sauvegarder toutes les soumissions dans la base de données.
J'utilise la méthode décrite sur le site Web du formulaire de contact 7 pour sélectionner le destinataire - Destinataire sélectionnable avec Pipes . J'utilise le nom de l'état en tant que liste déroulante sélectionnable et l'adresse électronique du vendeur suivant le canal.
[select* state
"Alabama|[email protected]"
"Alaska"
"Arizona|[email protected]"
"Arkansas|[email protected]"
"California|[email protected]"
"Colorado"
]
J'ai configuré le "courrier" de CF7 pour l'envoyer à l'adresse électronique centrale du site Web et à l'adresse électronique du vendeur qui opère dans l'état sélectionné.
[email protected],[state]
Les problèmes
Lorsqu'un visiteur sélectionne un état auquel un vendeur est affecté, l'adresse électronique de ce dernier est entrée dans la base de données, pas celle de l'état.
Lorsqu'un visiteur sélectionne un nom d'état qui n'a pas de représentant désigné, ce nom est entré dans la base de données, mais aucun courrier électronique n'est envoyé.
J'ai également essayé de configurer "Mail" pour envoyer à [email protected]
et "Mail (2)" pour envoyer à [state]
(adresse e-mail du vendeur), mais aucun e-mail n'a été envoyé à [email protected]
lorsqu'aucune adresse e-mail n'a été fournie pour le nom de l'état dans la liste déroulante. .
Enfin, j'ai essayé d'entrer le nom de l'état dans ce format - "Alaska|"
. Dans ce cas, rien n'a été entré dans la base de données pour state
et aucun email n'a été envoyé. J'ai testé cela en utilisant les deux options "Mail" listées ci-dessus.
La solution?
Je comprends maintenant que je peux simplement entrer [email protected]
pour tous les noms d’États sans représentant désigné - et c’est très bien.
Le problème avec ceci - l'adresse e-mail est toujours entrée dans la base de données pour state
.
J'imagine qu'il me faut un moyen de prendre le nom de l'état ([_raw_state]) et de le transférer dans un champ CF7 masqué afin qu'il puisse être enregistré dans la base de données, mais je n'arrive pas à comprendre comment.
Merci à Michael Simpson, de Contact Form DB. La solution est répertoriée (en quelque sorte cachée) sur le site Web de Formulaire de contact DB dans l'article - Menus CF7 avec pipes
Ajouter à functions.php
function myFilter($formData) {
// Change $formData
return $formData; // be sure to return it
}
add_filter('cfdb_form_data', 'myFilter');
function location_form_handler($formData)
{
$formName = 'ExtendedContact'; // change this to your form's name
$fieldName = 'state'; // change this to your field's name
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) {
// value|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');
Cela créera une entrée dans la base de données avec le nom d'état (champ avant le tube) sous la forme state
et un deuxième champ (adresse électronique après le canal) avec l'adresse électronique associée sous la forme state_email
.
Enfin, mettez à jour la définition de formulaire dans Contact Form 7 comme suit: [state_email]
NOTE
Je tiens également à mentionner, au cas où quelqu'un d'autre rencontrerait cette situation -
Dans mon formulaire, les visiteurs qui remplissent le formulaire sélectionnent l’état dans lequel ils se trouvent, puis le vendeur responsable de cet état reçoit le courrier électronique. De plus, j'avais besoin que le courrier électronique soit envoyé à une adresse électronique centrale (entreprise).
Cependant, tous les États n’ont pas de représentant commercial, car la société se concentre sur le Midwest.
Avec le formulaire de contact 7, si l'adresse e-mail après le canal était vide, les e-mails ne seraient pas envoyés du tout. La méthode décrite par Michael autorise en réalité un champ vide après le tuyau.
J'ai configuré "Mail" dans le formulaire à envoyer au courrier électronique central et "Mail (2)" à envoyer au vendeur (le cas échéant).