Using Contact Form 7
Situation
当访问者在网站上填写表格时,他们会输入:
姓名电子邮件电话地址(街道、城市、州、邮政编码)信息我需要将此信息保存到数据库中以备将来参考,我需要将电子邮件发送到中心电子邮件地址和特定电子邮件地址,具体地址根据访问者的状态而变化。
基本上,销售人员有地区,需要将网站上的联系人发送到主要网站的电子邮件地址以及地区负责人。
并非所有州都有指定的销售人员。
Steps Taken
我已安装
Contact Form DB 将所有提交内容保存到数据库。
我正在使用联系人表单7网站上描述的方法选择收件人-Selectable Recipient with Pipes. 我使用州名称作为可选下拉列表,并在管道后面使用销售人员的电子邮件地址。
[select* state
"Alabama|john@example.com"
"Alaska"
"Arizona|john@example.com"
"Arkansas|mary@example.com"
"California|mary@example.com"
"Colorado"
]
我设置了CF7的“邮件”以发送到网站的中心电子邮件地址和在所选州运营的销售人员的电子邮件地址。
central@example.com,[state]
The Problems
当访问者选择有指定销售人员的州时,销售人员的电子邮件地址将输入数据库,而不是该州。
当访问者选择一个没有指定销售人员的州名时,该州名将输入数据库,但不会发送电子邮件。
我还尝试设置要发送到的“邮件”central@example.com
和“邮件(2)”发送至[state]
(销售人员的电子邮件地址),但没有向发送电子邮件central@example.com
当下拉列表中没有为州名称提供电子邮件地址时。
最后,我尝试以这种格式输入州名称-"Alaska|"
. 在这种情况下,没有向数据库中输入任何内容state
没有发送电子邮件。我使用上面列出的两个“邮件”选项对此进行了测试。
The Solution?
现在,我明白了,我可以简单地进入
central@example.com
对于所有没有指定销售人员的州名称,这很好。
此问题-电子邮件地址仍然输入到数据库中state
.
我想我需要一种方法来获取状态名称([\\u raw\\u state]),并将其传递到一个隐藏的CF7字段中,这样就可以将其保存到数据库中,但我似乎不知道如何保存。
最合适的回答,由SO网友:Travis Pflanz 整理而成
感谢迈克尔·辛普森,来自联系表格DB。该解决方案列在联系表格DB网站的以下文章中(某种程度上是隐藏的)——CF7 Menus with Pipes
添加到函数。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\');
这将在数据库中创建一个状态名称(管道前的字段)为
state
和第二个字段(管道后的电子邮件地址),关联的电子邮件地址为
state_email
.
最后,更新联系人表格7中的表格定义:【state\\u email】
NOTE
我还想提一下,万一有人遇到这种情况-
在我的表格中,填写表格的访问者选择他们所在的州,然后负责该州的销售人员收到电子邮件。此外,我需要将电子邮件发送到中心(公司)电子邮件地址。
然而,并不是所有的州都有指定的销售人员,因为该公司专注于中西部地区。
对于联系人表单7,如果管道后的电子邮件地址为空,则根本不会发送电子邮件。Michael概述的方法实际上允许在管道后面有一个空字段。
我在表单中设置了“Mail”以发送给中心电子邮件,并设置了“Mail(2)”以发送给销售人员(如果存在)。