Обработка данных в Contact Form 7. Хук wpcf7_before_send_mail
Опубликовано: 07.09.2018

Читайте также у нас на сайте статью как делается форма обратная связь WordPress .
Хук wpcf7_before_send_mail основные моменты
Пара слов о том где можно использовать этот хук:
Для связи Contact Form 7 и AmoCRM / Амоцрм через апи. Например, можно напрямую отправлять заявки в amoCRM и создавать там пользователей с телефоном и email, которые были записанные в форме. Для связи CF7 и Slack / Слак. Очень удобная вещь кстати, можно легко и просто пушить сообщения менеджерам на телефон о том что на сайте был произведен заказ или нужно оказать помощь. Для сохранения всех сообщений в базу или в файл, которые отправляются с формы CF7 . Очень удобная функция, когда есть проблемы с получением почты или когда на сервере глючит функция mail. Можно создать собственную капчу или антиспам защиту, ведь хук выполняется перед отправкой почты. Можно менять почту получателя, делать расчеты и присоединять к письму дополнительную информацию.Для использования хука достаточно забросить в файл functions.php вот такой код:
Подготовка сайта под требования 152 ФЗ "О защите персональных данных"
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, который получает в переменную массив параметров, примерно вот так:
10. Создание прайслистов товаров.
// внутри функции 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] => <[email protected]> [recipient] => [email protected] // адрес получателя [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']="[email protected]"; $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»: