Получение URL источника перехода с помощью jQuery или Javascript - Проблема с кешем и Referrer URL
Надеюсь, кто-нибудь сможет помочь : )
Я пытаюсь получить URL источника первого посещения и отправить его в форму. Мы используем плагин Contact Form 7, поэтому я создал скрытое поле ввода, получаю URL источника и присваиваю это значение скрытому полю.
Все работало отлично, пока я не включил кеширование.
Вот функция, которую я использую (на случай, если кому-то понадобится)
function getRefererPage( $form_tag ){
if(!isset($_COOKIE['external_referrer_cookie']))
{
}
if ( $form_tag['name'] == 'referer-page' ) {
$form_tag['values'][] = $_COOKIE['external_referrer_cookie'];
}
return $form_tag;
}
add_filter( 'wpcf7_form_tag', 'getRefererPage' );
Где "referer-page" - это имя и ID скрытого поля в форме Contact Form 7.
После включения кеша мне пришлось искать решение на Javascript или jQuery для установки cookie.
Я добавил jQuery Cookie Plugin (https://github.com/carhartl/jquery-cookie) и затем пробовал несколько различных вариаций кода ниже для создания cookie и установки значения cookie.
Моя цель: Когда посетитель впервые приходит на сайт, установить значение cookie равным URL источника перехода, но затем сохранять это значение. Например, если посетитель приходит на сайт с google.com и затем перемещается по страницам сайта, когда он заполняет форму, значение в скрытом поле все еще должно быть URL Google с его параметрами.
Вот JS код, который сейчас находится в footer.php темы.
jQuery(document).ready(function($){ // НАЧАЛО ПОЛЬЗОВАТЕЛЬСКОГО JQUERY БЕЗ КОНФЛИКТОВ
// $.cookie('mysite_referrer', document.referrer);
// var initreferrer = document.referrer;
// $.cookie('mysite_referrer', initreferrer);
//console.log('текущий cookie ref:'+$.cookie('external_referrer_cookie'));
//console.log('тестирование');
$.cookie('external_referrer_cookie');
if ($.cookie('external_referrer_cookie') == 'undefined' ) {
// console.log('установка cookie для'+ document.referrer);
$.cookie('external_referrer_cookie', document.referrer);
$('.wpcf7-text.referer-page').val($.cookie('wsg_external_referrer_cookie'));
console.log('текущий cookie ref:'+$.cookie('wsg_external_referrer_cookie'));
}
// $('#referer-page').val($.cookie('external_referrer_cookie'));
console.log('текущий cookie вне функции ref:'+$.cookie('external_referrer_cookie'));
/*
var cookieName = 'cookietest';
$(function() {
checkCookie();
});
function checkCookie() {
if (document.cookie.length > 0 && document.cookie.indexOf(cookieName + '=') != -1) {
// ничего не делать, cookie уже отправлен
} else {
// обработать jQuery анимацию
// установить cookie, чтобы показать, что пользователь уже посещал
document.cookie = cookieName + "=1";
}
}
*/
}); // КОНЕЦ ПОЛЬЗОВАТЕЛЬСКОГО JQUERY БЕЗ КОНФЛИКТОВ
Как вы можете видеть в закомментированных строках, я пробовал множество подходов, которые нашел в нескольких обучающих материалах. Я борюсь с этим уже пару дней, пожалуйста, помогите : ))
Спасибо

У меня нет ответа на основе cookie, но я думаю, что это не конфиденциальные данные, вы можете попробовать localStorage.
jQuery(document).ready(function($){
var initreferrer = document.referrer;
if(initreferrer.indexOf('yourdomain.com') === -1 ) { // Проверить, является ли реферер вашим сайтом или нет. Если нет (возвращает -1), установить localStorage.
localStorage.setItem("mysite_referrer", initreferrer);
}
});
Затем вы можете использовать функцию JavaScript (вместо фильтра, как вы делали), чтобы заполнить ваше скрытое поле сохраненным в localStorage реферером. Мы можем получить его с помощью localStorage.getItem("mystite_referer")
.

Привет @Tung Du, спасибо за ответ. Можешь подсказать, как я могу заполнить значение скрытого поля с помощью JavaScript? Я пробовал $('.referrer-page').val(localStorage.getItem("mystite_referer")); но это не сработало. Также console.log(localStorage.getItem("mystite_referer")); << выдает NULL в консоли.

NULL означает, что localStorage еще не был установлен. Поэтому вы не можете заполнить скрытое поле. Вам нужно изменить условие на ваш домен, чтобы защитить первый реферер. Здесь я пропускаю реферер с вашего сайта. Только внешние сайты. Сначала вы можете закомментировать условие if, чтобы убедиться, что все работает. Также можете сделать console.log(initreferrer)
для проверки document.referer
для более простой отладки.

Мне удалось получить значение в консоли, были некоторые опечатки в коде, например в имени ID и т.д., которые я сначала не заметил. В любом случае, сейчас ситуация следующая. Когда я захожу на сайт из Google, в консоли ничего нет. Если я перехожу на другие страницы, неважно сколько страниц я меняю, в консоли отображается google.com как URL реферера, что отлично! Но console.log пустой при первой загрузке страницы, и другая проблема в том, что я не могу заполнить значение скрытого поля с помощью JS, вот мой код: https://codeshare.io/tiirU

Не могли бы вы отправить мне document.referer при первой загрузке страницы?

Кажется, у меня получилось, по крайней мере в первых 5 тестах на кешированных страницах всё работает нормально. Вот мой код:
jQuery(document).ready(function($){ var initreferrer = document.referrer; if(initreferrer.indexOf('mydomain.com') === -1 ) { localStorage.setItem('mysite_referrer', initreferrer); } document.getElementById("page-referrer").innerHTML=localStorage.getItem('mysite_referrer'); document.getElementById("page-referrer").value = localStorage.getItem('mysite_referrer'); });
