Для интеграции Contact Form 7 с AmoCRM для нескольких клиентских сатов использую плагин от IT Galaxy. Работает отлично, настраивается гибко. Но не всё, что мне хотелось бы можно передать в Амо встроенными шорткодами. В частности, referer — источник перехода.
При этом у меня стояла задача не просто передать адрес страницы, с которой пришёл на посадочную пользователь, а именно адрес источника: соцсеть, поисковая система, сторонний сайт и т. д.
Передача referer в AmoCRM
Сначала я попытался разобраться сам. Логика была такой: если данные отправляет Contact Form 7, значит нужно создать кастомный шорткод для CF7, который и передаст в Амо источник трафика. Вооружившись мануалом от WP-KAMA и почитав форумы, я наваял следующее:
//Добавляем шорткод referer в CF7
add_filter( 'wpcf7_form_elements', 'do_shortcode' );
function referer_func() {
session_start();
if (!isset($_SESSION['referer']) || empty($_SESSION['referer'])) {
$_SESSION['referer'] = $_SERVER['HTTP_REFERER'];
}
return $_SESSION['referer'];
}
add_shortcode('referer', 'referer_func');
add_filter('wpcf7_mail_components', 'do_shortcode_mail', 10, 3);
function do_shortcode_mail( $components, $contactForm, $mailComponent ){
if( isset($components['body']) ){
$components['body'] = do_shortcode($components['body']);
}
return $components;
}
Данный код записывает первичный источник в переменную. Даже если пользователь побродит по сайту, источник перехода не изменится. В письме ссылка приходила. Но в AmoCRM значение не передавалось.
Потратив ещё день на изучение PHP, я решил написать разработчикам плагина. Спасибо ребятам из IT Galaxy за помощь! Они прислали другой код, благодаря которому передача данных в AmoCRM заработала:
//Запоминаем реферера в куку пользователю
add_action('init', static function() {
if (!empty($_COOKIE['cf7_referrer'])) {
return;
}
setcookie('cf7_referrer', $_SERVER['HTTP_REFERER'] ?? '', 0, '/');
});
/*
* Заполняем значение реферера по куке в данные отправляемой формы,
* таким образом, далее можно использовать и в шаблоне письма и в другом месте, как [referer]
*/
add_filter('wpcf7_posted_data', static function ($postedData) {
$postedData['referer'] = $_COOKIE['cf7_referrer'] ?? '';
return $postedData;
});
Реферер сохраняется в куку и хранится там в течение сессии (пока пользователь не закроет браузер). После чего сбрасывается. Таким образом можно отследить именно источник результативного визита, а не самого первого.
Код вставляем в functions.php
активной темы. Затем в настройках формы CF7 проставляем шорткоды в нужных местах:
Надеюсь, кому-нибудь пригодится и сэкономит время.