Как выбрать получателя email в Contact Form 7 на основе поля выбора штата и сохранить в базу данных

28 янв. 2013 г., 09:30:08
Просмотры: 19.8K
Голосов: 4

Использование Contact Form 7

Ситуация

Когда посетитель заполняет форму на сайте, он вводит:

  • Имя
  • Email
  • Телефон
  • Адрес (Улица, Город, Штат, Почтовый индекс)
  • Сообщение

Мне нужно сохранить эту информацию в базе данных для дальнейшего использования и отправить email на центральный адрес электронной почты, а также на определенный email-адрес, который меняется в зависимости от штата посетителя.

По сути, у продавцов есть территории, и контакты с веб-сайта должны отправляться как на основной email сайта, так и человеку, ответственному за территорию.

Не все штаты имеют назначенного продавца.

Предпринятые шаги

Я установил Contact Form DB для сохранения всех отправленных форм в базу данных.

Я использую метод, описанный на сайте Contact Form 7 для выбора получателя - Выбираемый получатель с использованием символа '|'. Я использую название штата как выпадающий список и email продавца после символа '|'.

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

Я настроил "Mail" в CF7 для отправки на центральный email сайта и на email продавца, работающего в выбранном штате.

central@example.com,[state]

Проблемы

Когда посетитель выбирает штат с назначенным продавцом, email продавца сохраняется в базе данных вместо названия штата.

Когда посетитель выбирает штат, у которого нет назначенного продавца, название штата сохраняется в базе данных, но email не отправляется.

Я также пробовал настроить "Mail" для отправки на central@example.com и "Mail (2)" для отправки на [state] (email продавца), однако письмо не отправлялось на central@example.com, когда для названия штата в выпадающем списке не был указан email.

Наконец, я попробовал ввести название штата в формате - "Alaska|". В этом случае ничего не сохранялось в базе данных для поля state и email не отправлялся. Я тестировал это, используя оба варианта настройки "Mail", описанных выше.

Решение?

Теперь я понимаю, что могу просто ввести central@example.com для всех названий штатов без назначенного продавца - и это нормально.

Проблема в том, что email-адрес все равно сохраняется в базе данных для поля state.

Полагаю, мне нужен способ взять название штата ([_raw_state]) и передать его в скрытое поле CF7, чтобы оно могло быть сохранено в базе данных, но я не могу понять, как это сделать.

0
Все ответы на вопрос 1
0

Благодарность Майклу Симпсону из Contact Form DB. Решение (довольно скрыто) представлено на сайте Contact Form DB в статье - CF7 Меню с разделителями |

Добавьте в functions.php:

function myFilter($formData) {
// Изменяем $formData
return $formData; // обязательно возвращаем данные
}

add_filter('cfdb_form_data', 'myFilter');

function location_form_handler($formData)
{
$formName = 'ExtendedContact'; // измените на название вашей формы
$fieldName = 'state'; // измените на название вашего поля
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) {
                // значение|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 и второе поле (email после символа |) с соответствующим email-адресом в поле state_email.

Наконец, обновите определение формы в Contact Form 7 следующим образом: [state_email]

ПРИМЕЧАНИЕ

Также хочу упомянуть на случай, если кто-то столкнётся с подобной ситуацией:

В моей форме посетители выбирают штат, в котором находятся, после чего письмо отправляется ответственному за этот штат продавцу. Кроме того, мне нужно было, чтобы письмо отправлялось на центральный (корпоративный) email-адрес.

Однако не все штаты имеют назначенного продавца, так как компания сосредоточена на среднем западе.

В Contact Form 7, если поле email после символа | было пустым, письма вообще не отправлялись. Метод, предложенный Майклом, фактически позволяет оставлять поле после | пустым.

Я настроил "Почту" в форме для отправки на центральный email и "Почту (2)" для отправки продавцу (если он существует).

30 янв. 2013 г. 00:28:35