Обработка данных в Contact Form 7 после отправки wpcf7_before_send_mail

Всем привет. Вот и дошли у меня руки описать волшебный хук для Contact Form 7: wpcf7_before_send_mail. Почему волшебный? - с его помощью можно легко и просто отправить введенную информацию пользователем из CF7 в Slack, AmoCRM или просто сохранить данные которые ввел пользователь.Вариантов использования этого хука очень много, я не смогу все поместить в одну статью, да и смысла наверное нет, ведь главное понимать как работает wpcf7_before_send_mail, а подвязать к нему можно любое сторонне АПИ, даже Unisender, если потребуется 🙂 . Многие, например, спрашивают как сохранить заполненную форму в CF7 или как проверить данные которые заполнил пользователь в форме на PHP.

Читайте также у нас на сайте статью как делается форма обратная связь WordPress.

Хук wpcf7_before_send_mail основные моменты

Пара слов о том где можно использовать этот хук:

  1. Для связи Contact Form 7 и AmoCRM / Амоцрм через апи. Например, можно напрямую отправлять заявки в amoCRM и создавать там пользователей с телефоном и email, которые были записанные в форме.
  2. Для связи CF7 и Slack / Слак. Очень удобная вещь кстати, можно легко и просто пушить сообщения менеджерам на телефон о том что на сайте был произведен заказ или нужно оказать помощь.
  3. Для сохранения всех сообщений в базу или в файл, которые отправляются с формы CF7. Очень удобная функция, когда есть проблемы с получением почты или когда на сервере глючит функция mail.
  4. Можно создать собственную капчу или антиспам защиту, ведь хук выполняется перед отправкой почты.
  5. Можно менять почту получателя, делать расчеты и присоединять к письму дополнительную информацию.

Для использования хука достаточно забросить в файл functions.php вот такой код:

add_filter( 'wpcf7_before_send_mail', 'wpcf7_before_send_mail_start_function' );
function wpcf7_before_send_mail_start_function($cf7){
//$cf7->id - ид формы которая сработала
//$_POST['your-name'] - поле которые пользователь заполнял на сайте your-name заменить на нужное значение
}

Также, в функции можно использовать метод prop, который получает в переменную массив параметров, примерно вот так:

// внутри функции wpcf7_before_send_mail_start_function
$mail=$cf7->prop('mail');
// если используете несколько писем то второе писмо будет $cf7->prop('mail_2')
// $cf7->prop('mail_3') и так далее
//print_r($mail);
/*
Array
(
 [active] => 1
 [subject] => "[your-subject]" // заголовок письма
 [sender] => <wordpress@site.ru>
 [recipient] => admin@site.ru // адрес получателя
 [body] => ... //тело письма
 [additional_headers] => Reply-To: [your-email]
 [attachments] =>
 [use_html] =>
 [exclude_blank] =>
)
*/

Функция prop вам потребуется когда вы захотите менять что то в письме, например дописать текст в конец тела письма. Для сохранения изменений воспользуйтесь функцией set_properties, вот так например:

add_filter( 'wpcf7_before_send_mail', 'wpcf7_before_send_mail_start_function' );
function wpcf7_before_send_mail_start_function($cf7){
$mail=$cf7->prop('mail');
if($mail){
 $mail['body'].="\n\rС уважением Help-WP.ru"; // допишем в конец тела писма текст
 $cf7->set_properties(array('mail'=>$mail));
}
}

Результатом работы этого кода будет вот такое сообщение и строчка внизу:

 

Как поменять получателя сообщения из формы Contact Form 7 ?

Все предельно просто. Получатель указан в параметре recipient. Код будет выглядеть вот так:

add_filter( 'wpcf7_before_send_mail', 'wpcf7_before_send_mail_start_function' );
function wpcf7_before_send_mail_start_function($cf7){
$mail=$cf7->prop('mail');
if($mail){
 $mail['recipient']="info@help-wp.ru";
 $cf7->set_properties(array('mail'=>$mail));
}
}

 

Как связать Contact Form 7 и Slack (слак)

Здесь я хочу показать как во время приема данных из Contact Form 7 можно отправить сообщение в Slack / Слак с телом основного письма. Код не сложный, но предварительно нужно зарегистрироваться в Слаке и получить код для доступа в API.

Код примера:

<?php //функция для отправки информации в слак
function send_text_to_slack($id, $text){
 $url="https://hooks.slack.com/services/Tsdf000000/TSCODE000000"; // ссылка куда будем постить, нужно получить в апи слак
 
 $data = array(
 "username" => "admin help-wp", // имя кто постить, может быть любое
 "text" => $text
 );
 $json_string = json_encode($data);
 
 $slack_call = curl_init($url);
 curl_setopt($slack_call, CURLOPT_CUSTOMREQUEST, "POST");
 curl_setopt($slack_call, CURLOPT_POSTFIELDS, $json_string);
 curl_setopt($slack_call, CURLOPT_CRLF, true);
 curl_setopt($slack_call, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($slack_call, CURLOPT_HTTPHEADER, array(
 "Content-Type: application/json",
 "Content-Length: " . strlen($json_string))
 );
 
 $result = curl_exec($slack_call);
 curl_close($slack_call);
}

//
add_filter( 'wpcf7_before_send_mail', 'wpcf7_before_send_mail_start_function' );
function wpcf7_before_send_mail_start_function($cf7){
 $mail=$cf7->prop('mail');
 if($mail){
 $text=$mail['body'];
 $text=do_shortcode($text); //обязательно нужно делать иначе получите в теле писма коды [your-name] вместо реального имени
 send_text_to_slack($cf7->id, $text);// вызов функции отправки
 }
} ?>

Как связать Contact Form 7 и amoCRM (амоцрм)

Отправка сообщений в amoCRM делается аналогично той, которую мы писали выше для слак. Отличается только код отправки. Вместо функции send_text_to_slack, вам нужно написать свою функцию для создания сделок, задач и пользователей. Для этого, можно посмотреть документацию по АПИ амоцрм. Тот код, который есть у меня, у вас не заработает, так как много привязок к статичным данным, например ид пользователей, структура отображения, типы, ид полей под телефон, почту и так далее.

На перед извиняюсь перед теми пользователями, которые хотели взять готовый код. Главная цель была показать как работает wpcf7_before_send_mail, а не как работать с амоцрм. Возможно, в будущем, я постараюсь посвятить этому отдельный пост.

 

Если у вас возникли проблемы с плагином CF7 посмотрите статью contact form 7 не работает, а если вам нужно больше параметров для этого плагина или нужно прикрепить целевой звонок из метрики смотрите статью contact form 7 дополнительные настройки.

На этом, у меня, пожалуй что все. Не забываем делиться постами со своими друзьями в соц сетях:

Комментарии к записи «Обработка данных в Contact Form 7 после отправки wpcf7_before_send_mail»:
Сделать заказ
Онлайн помощь по WordPress
На сайте используются файлы Сookies. Отключить Сookies можно в настройках браузера!