/** * =================================================================== * 2. SCRIPT AJAX PARA REGISTRAR CLICS (PLAN E: El Definitivo con Delegación de Eventos) * =================================================================== * Esta es la versión más robusta. Escucha todos los clics en la página y * utiliza event.target.closest() para determinar si el clic ocurrió dentro * del botón de Join.chat. Esto funciona sin importar qué elemento hijo * (icono, texto, etc.) reciba el clic. */ add_action('wp_footer', 'empresa_tracking_enqueue_script'); function empresa_tracking_enqueue_script() { if (is_product()) { $datos_para_js = array( 'ajax_url' => admin_url('admin-ajax.php'), 'producto_id' => get_the_ID(), 'nonce' => wp_create_nonce('empresa_tracking_nonce') ); // Script "Plan E - Delegación de Eventos" $script_inline = " document.addEventListener('DOMContentLoaded', function() { // --- INICIO DEL SCRIPT DE TRACKING DEFINITIVO --- // Este es el selector del CONTENEDOR principal de Join.chat. // Es casi seguro que este es el correcto. const SELECTOR_CONTENEDOR_JC = '.joinchat-button'; // Añadimos un único 'listener' al cuerpo del documento. document.body.addEventListener('click', function(event) { // Cuando ocurra un clic en cualquier parte, buscamos el ancestro más cercano // que coincida con el selector de nuestro botón. const botonClickeado = event.target.closest(SELECTOR_CONTENEDOR_JC); // Si se encontró un ancestro (es decir, el clic fue DENTRO del botón)... if (botonClickeado) { // Evitamos registrar el mismo clic varias veces si el usuario hace doble clic rápido. if (botonClickeado.hasAttribute('data-tracking-sent')) { return; // Ya se envió, no hacemos nada. } console.log('¡CLIC DENTRO DE JOIN.CHAT DETECTADO! (Método de Delegación). Registrando...'); // Marcamos el botón como 'enviado' temporalmente. botonClickeado.setAttribute('data-tracking-sent', 'true'); setTimeout(() => { botonClickeado.removeAttribute('data-tracking-sent'); }, 2000); // Reseteamos la marca después de 2 segundos. // Preparamos y enviamos los datos. const formData = new URLSearchParams(); formData.append('action', 'empresa_tracking_clic'); formData.append('producto_id', empresa_tracking_data.producto_id); formData.append('security', empresa_tracking_data.nonce); if (navigator.sendBeacon) { navigator.sendBeacon(empresa_tracking_data.ajax_url, formData); } else { fetch(empresa_tracking_data.ajax_url, { method: 'POST', body: formData, keepalive: true }).catch(error => console.error('Error en tracking:', error)); } } }); console.log('Listener de clics global para Join.chat activado. Buscando clics en ancestros de: ' + SELECTOR_CONTENEDOR_JC); // --- FIN DEL SCRIPT --- }); "; wp_enqueue_script('wp-util'); wp_localize_script('wp-util', 'empresa_tracking_data', $datos_para_js); wp_add_inline_script('wp-util', $script_inline); } } Pastas caseras archivos - El Portal de Merlo

Pastas caseras