URL del Referente con jQuery o Javascript - Problema de Caché y URL del Referente
Espero que alguien pueda ayudarme : )
Lo que estoy intentando hacer es obtener la URL del referente de la primera visita y enviarla al formulario. Usamos el plugin Contact Form 7, así que creé un campo oculto, obtengo la URL del referente y asigno ese valor del referente a ese campo oculto.
Todo funcionaba bien, hasta que habilité el caché.
Esta es la función que uso (en caso de que alguien la necesite)
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' );
Donde "referer-page" es el nombre y ID del campo oculto en el formulario de Contact Form 7.
Una vez que habilité el caché, tuve que pensar en una solución con Javascript o jQuery para establecer la cookie.
Agregué el jQuery Cookie Plugin (https://github.com/carhartl/jquery-cookie) y luego probé múltiples variaciones diferentes del código a continuación para crear una cookie y establecer el valor de la cookie.
Mi Objetivo es: Cuando el visitante del sitio web viene por primera vez, establecer el valor de la cookie en la URL del referente, pero luego mantener el valor, por ejemplo, si el visitante viene al sitio web desde google.com y luego se mueve por las páginas del sitio web, una vez que completa el formulario, el valor en el campo oculto debería seguir siendo la URL de Google con sus parámetros.
Este es el código JS que tengo ahora en el footer.php del tema.
jQuery(document).ready(function($){ // INICIO JQUERY PERSONALIZADO SIN CONFLICTO
// $.cookie('mysite_referrer', document.referrer);
// var initreferrer = document.referrer;
// $.cookie('mysite_referrer', initreferrer);
//console.log('cookie ref actual:'+$.cookie('external_referrer_cookie'));
//console.log('prueba');
$.cookie('external_referrer_cookie');
if ($.cookie('external_referrer_cookie') == 'undefined' ) {
// console.log('estableciendo cookie para'+ document.referrer);
$.cookie('external_referrer_cookie', document.referrer);
$('.wpcf7-text.referer-page').val($.cookie('wsg_external_referrer_cookie'));
console.log('cookie ref actual:'+$.cookie('wsg_external_referrer_cookie'));
}
// $('#referer-page').val($.cookie('external_referrer_cookie'));
console.log('cookie ref fuera de función:'+$.cookie('external_referrer_cookie'));
/*
var cookieName = 'cookietest';
$(function() {
checkCookie();
});
function checkCookie() {
if (document.cookie.length > 0 && document.cookie.indexOf(cookieName + '=') != -1) {
// no hacer nada, cookie ya enviada
} else {
// manejar animación jQuery
// establecer la cookie para mostrar que el usuario ya visitó
document.cookie = cookieName + "=1";
}
}
*/
}); // FIN JQUERY PERSONALIZADO SIN CONFLICTO
Como pueden ver en las líneas comentadas, probé muchos enfoques que encontré en varios tutoriales de sitios web. He estado luchando con esto durante un par de días, por favor ayuda : ))
Gracias

No tengo la respuesta basada en cookies, pero creo que estos no son datos sensibles, puedes intentar con localStorage.
jQuery(document).ready(function($){
var initreferrer = document.referrer;
if(initreferrer.indexOf('yourdomain.com') === -1 ) { // Verifica si el referer es de tu sitio o no. Si no lo es (retorna -1) establece el localStorage.
localStorage.setItem("mysite_referrer", initreferrer);
}
});
Luego puedes usar una función javascript (en lugar de un filtro como hiciste) para llenar tu campo oculto con el referer guardado en el localStorage del navegador. Podemos obtenerlo con localStorage.getItem("mystite_referer")
.

Hola @Tung Du, gracias por tu respuesta. ¿Podrías decirme cómo podría llenar el valor del campo oculto con javascript? Intenté con $('.referrer-page').val(localStorage.getItem("mystite_referer")); pero no funcionó. Además, console.log(localStorage.getItem("mystite_referer")); << devuelve NULL en la consola.

NULL significa que el localStorage aún no ha sido configurado. Por lo tanto, no puedes llenar el campo oculto. Debes cambiar a tu dominio en la condición para proteger el primer referer. Aquí omití el referer de tu sitio web. Solo fuera de tu sitio web. Primero puedes comentar la condición if para asegurarte de que todo funcione. También puedes hacer console.log(initreferrer)
para verificar el document.referer
y facilitar la depuración.

Pude obtener el valor en el console log, había algunos errores tipográficos en el código como el nombre del ID, etc., que no noté inicialmente. De todos modos, la situación que tengo ahora es la siguiente. Cuando voy a mi sitio web desde Google, no hay nada en la consola, si navego a otras páginas, sin importar cuántas cambie, en la consola aparece google.com como URL de referencia, ¡así que eso es genial! Pero, console.log está vacío en la primera carga de la página, y otro problema es que no puedo llenar el valor del campo oculto con js, este es el código que tengo: https://codeshare.io/tiirU

¿Podrías enviarme el document.referer en la primera carga de la página?

Creo que lo tengo funcionando, al menos en las primeras 5 pruebas en páginas cacheadas, parece estar funcionando bien. Este es el código que tengo:
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'); });
