Saltar al contenido principal
9 min de lectura

Integración con WordPress

Añada analíticas centradas en la privacidad a su sitio WordPress. Rastree visitantes, comprenda el comportamiento y haga crecer su audiencia sin comprometer la privacidad.

Solo configuración manual. Zenovay no ofrece actualmente un plugin oficial de WordPress ni una extensión de WooCommerce. Las instrucciones a continuación usan el script de seguimiento estándar con fragmentos en header.php / functions.php, que funcionan de forma fiable en cualquier instalación de WordPress. Donde se mencionen referencias a "seguimiento automático", esto significa un único hook add_action() que usted pega en su tema — no un plugin instalable.


Inicio rápido

MétodoMás adecuado paraTiempo de configuración
Fragmento en header.phpTemas personalizados3 minutos
Hook en functions.phpSitios administrados por desarrolladores con exclusión de admins5 minutos
wp_enqueue_scriptSitios que usan estrictamente el sistema de encolado de scripts de WordPress5 minutos

Método 1: Encabezado del tema (Recomendado)

Añada al header.php de su tema antes de </head>:

<!-- Zenovay Analytics -->
<script defer data-tracking-code="YOUR_TRACKING_CODE" src="https://api.zenovay.com/z.js"></script>

Esta es la instalación más sencilla. Funciona en todos los temas que tienen un archivo header.php con la etiqueta </head> visible en la plantilla.


Método 2: Hook en functions.php

Para mayor control (excluir usuarios administradores, carga condicional, etc.), añada al functions.php de su tema:

/**
 * Add Zenovay Analytics tracking script
 */
function zenovay_tracking_script() {
    // Don't track admin users (optional)
    if (current_user_can('manage_options')) {
        return;
    }

    ?>
    <script defer data-tracking-code="YOUR_TRACKING_CODE" src="https://api.zenovay.com/z.js"></script>
    <?php
}
add_action('wp_head', 'zenovay_tracking_script');

Método 3: wp_enqueue_script

Para una gestión correcta del script siguiendo las convenciones de WordPress:

/**
 * Enqueue Zenovay Analytics script
 */
function zenovay_enqueue_scripts() {
    if (current_user_can('manage_options')) {
        return;
    }

    wp_enqueue_script(
        'zenovay-analytics',
        'https://api.zenovay.com/z.js',
        array(), // No dependencies
        null,    // No version (external script)
        false    // Load in header
    );

    add_filter('script_loader_tag', function($tag, $handle) {
        if ('zenovay-analytics' === $handle) {
            return str_replace(' src', ' defer data-tracking-code="YOUR_TRACKING_CODE" src', $tag);
        }
        return $tag;
    }, 10, 2);
}
add_action('wp_enqueue_scripts', 'zenovay_enqueue_scripts');

Seguimiento con WooCommerce

Rastree vistas de producto, añadir al carrito y compras en su tienda WooCommerce. Añada al functions.php de su tema:

/**
 * Zenovay WooCommerce Event Tracking
 */

// Track product views
function zenovay_track_product_view() {
    if (!is_product()) return;

    global $product;
    ?>
    <script>
    document.addEventListener('DOMContentLoaded', function() {
        if (window.zenovay) {
            window.zenovay('track', 'product_viewed', {
                product_id: '<?php echo esc_js($product->get_id()); ?>',
                product_name: '<?php echo esc_js($product->get_name()); ?>',
                price: <?php echo $product->get_price(); ?>,
                currency: '<?php echo get_woocommerce_currency(); ?>',
                category: '<?php echo esc_js(wc_get_product_category_list($product->get_id())); ?>'
            });
        }
    });
    </script>
    <?php
}
add_action('wp_footer', 'zenovay_track_product_view');

// Track add to cart
function zenovay_track_add_to_cart($cart_item_key, $product_id, $quantity) {
    $product = wc_get_product($product_id);
    ?>
    <script>
    if (window.zenovay) {
        window.zenovay('track', 'add_to_cart', {
            product_id: '<?php echo esc_js($product_id); ?>',
            product_name: '<?php echo esc_js($product->get_name()); ?>',
            price: <?php echo $product->get_price(); ?>,
            quantity: <?php echo $quantity; ?>,
            currency: '<?php echo get_woocommerce_currency(); ?>'
        });
    }
    </script>
    <?php
}
add_action('woocommerce_add_to_cart', 'zenovay_track_add_to_cart', 10, 3);

// Track purchases on thank you page
function zenovay_track_purchase($order_id) {
    $order = wc_get_order($order_id);
    if (!$order) return;

    // Only track once
    if ($order->get_meta('_zenovay_tracked')) return;
    $order->update_meta_data('_zenovay_tracked', true);
    $order->save();

    $items = array();
    foreach ($order->get_items() as $item) {
        $items[] = array(
            'product_id' => $item->get_product_id(),
            'name' => $item->get_name(),
            'price' => $item->get_total(),
            'quantity' => $item->get_quantity()
        );
    }
    ?>
    <script>
    document.addEventListener('DOMContentLoaded', function() {
        if (window.zenovay) {
            window.zenovay('track', 'purchase', {
                transaction_id: '<?php echo esc_js($order->get_order_number()); ?>',
                revenue: <?php echo $order->get_total(); ?>,
                currency: '<?php echo $order->get_currency(); ?>',
                tax: <?php echo $order->get_total_tax(); ?>,
                shipping: <?php echo $order->get_shipping_total(); ?>,
                items: <?php echo json_encode($items); ?>
            });
        }
    });
    </script>
    <?php
}
add_action('woocommerce_thankyou', 'zenovay_track_purchase');

Seguimiento de formularios de contacto

Contact Form 7

function zenovay_track_cf7_submission($contact_form, $result) {
    if ($result['status'] !== 'mail_sent') return;
    ?>
    <script>
    if (window.zenovay) {
        window.zenovay('track', 'form_submitted', {
            form_id: '<?php echo esc_js($contact_form->id()); ?>',
            form_name: '<?php echo esc_js($contact_form->title()); ?>'
        });
    }
    </script>
    <?php
}
add_action('wpcf7_mail_sent', 'zenovay_track_cf7_submission', 10, 2);

O use el evento JavaScript:

document.addEventListener('wpcf7mailsent', function(event) {
    if (window.zenovay) {
        window.zenovay('track', 'form_submitted', {
            form_id: event.detail.contactFormId,
        });
    }
});

Gravity Forms

function zenovay_track_gf_submission($entry, $form) {
    ?>
    <script>
    if (window.zenovay) {
        window.zenovay('track', 'form_submitted', {
            form_id: '<?php echo esc_js($form['id']); ?>',
            form_name: '<?php echo esc_js($form['title']); ?>'
        });
    }
    </script>
    <?php
}
add_action('gform_after_submission', 'zenovay_track_gf_submission', 10, 2);

WPForms

function zenovay_track_wpforms_submission($fields, $entry, $form_data) {
    ?>
    <script>
    if (window.zenovay) {
        window.zenovay('track', 'form_submitted', {
            form_id: '<?php echo esc_js($form_data['id']); ?>',
            form_name: '<?php echo esc_js($form_data['settings']['form_title']); ?>'
        });
    }
    </script>
    <?php
}
add_action('wpforms_process_complete', 'zenovay_track_wpforms_submission', 10, 3);

Identificar usuarios con sesión iniciada

Identifique a los usuarios de WordPress para el seguimiento entre sesiones:

function zenovay_identify_user() {
    if (!is_user_logged_in()) return;

    $user = wp_get_current_user();
    ?>
    <script>
    document.addEventListener('DOMContentLoaded', function() {
        if (window.zenovay) {
            window.zenovay('identify', {
                userId: '<?php echo esc_js($user->ID); ?>',
                email: '<?php echo esc_js($user->user_email); ?>',
                name: '<?php echo esc_js($user->display_name); ?>'
            });
        }
    });
    </script>
    <?php
}
add_action('wp_footer', 'zenovay_identify_user');

Configuración del seguimiento first-party

Omita los bloqueadores de anuncios mediante proxy a través de su dominio. Consulte la Guía de seguimiento first-party para la configuración multiplataforma. Reglas de reescritura específicas de WordPress:

/**
 * Add rewrite rules for Zenovay first-party proxy
 */
function zenovay_add_rewrite_rules() {
    add_rewrite_rule('^_z/script\.js$', 'index.php?zenovay_proxy=script', 'top');
    add_rewrite_rule('^_z/event$', 'index.php?zenovay_proxy=event', 'top');
}
add_action('init', 'zenovay_add_rewrite_rules');

function zenovay_query_vars($vars) {
    $vars[] = 'zenovay_proxy';
    return $vars;
}
add_filter('query_vars', 'zenovay_query_vars');

function zenovay_proxy_handler() {
    $proxy = get_query_var('zenovay_proxy');
    if (!$proxy) return;

    if ($proxy === 'script') {
        header('Content-Type: application/javascript');
        echo file_get_contents('https://api.zenovay.com/z.js');
        exit;
    }

    if ($proxy === 'event') {
        $response = wp_remote_post('https://api.zenovay.com/e/' . $_GET['tracking_code'], [
            'body' => file_get_contents('php://input'),
            'headers' => ['Content-Type' => 'application/json']
        ]);

        header('Content-Type: application/json');
        echo wp_remote_retrieve_body($response);
        exit;
    }
}
add_action('template_redirect', 'zenovay_proxy_handler');

Luego actualice su script de seguimiento para usar el proxy:

<script defer
    data-tracking-code="YOUR_TRACKING_CODE"
    data-api-url="/_z/"
    src="/_z/script.js">
</script>

Después de añadir las reglas de reescritura, vaya a Settings → Permalinks y haga clic en Save Changes para vaciar la caché de reescritura.


Compatibilidad con plugins de caché

Excluya las rutas first-party de Zenovay de su plugin de caché para que los eventos se envíen correctamente.

WP Super Cache

Añada a wp-content/wp-cache-config.php:

$cache_rejected_uri = array(
    '/_z/',
);

W3 Total Cache

Vaya a Performance → Page Cache y añada /_z/ a Never cache the following pages.

LiteSpeed Cache

LiteSpeed Cache → Cache → Excludes → Do Not Cache URIs:

/_z/

WP Rocket

Settings → WP Rocket → Advanced Rules → Never Cache URL(s):

/_z/(.*)

WP Fastest Cache

WP Fastest Cache → Exclude → Exclude Pages — añada /_z/.


Configuración para Multisitio

Para redes WordPress Multisitio, el script de seguimiento vive en el header.php o functions.php de su tema y funciona por sitio según la configuración. Para usar un único código de seguimiento en toda la red:

/**
 * Use a single tracking code across the multisite network
 */
function zenovay_network_tracking_code() {
    return 'YOUR_NETWORK_TRACKING_CODE';
}
add_filter('zenovay_tracking_code', 'zenovay_network_tracking_code');

De lo contrario, configure un código de seguimiento diferente por sitio codificándolo directamente en el tema de cada sitio.


Notas de rendimiento

El rastreador de Zenovay es:

  • Diferido — no bloquea el renderizado de la página
  • Ligero — < 23 KB comprimido con gzip
  • Entregado por CDN — almacenado en caché globalmente en el borde

Carga condicional

Omita el seguimiento en páginas específicas:

function zenovay_conditional_loading() {
    if (is_admin()) return;
    if (is_page(array('privacy-policy', 'terms'))) return;
    ?>
    <script defer data-tracking-code="YOUR_TRACKING_CODE" src="https://api.zenovay.com/z.js"></script>
    <?php
}
add_action('wp_head', 'zenovay_conditional_loading');

Resolución de problemas

El script no se carga

  1. Vea el código fuente de la página (Cmd/Ctrl+U) y busque <script defer data-tracking-code=...> entre <head> y </head>
  2. Verifique que su código de seguimiento coincida con el valor en el panel de Zenovay
  3. Abra la consola del navegador y compruebe si hay errores de JavaScript
  4. Desactive temporalmente el caché para realizar pruebas
  5. Compruebe si algún plugin de seguridad (Wordfence, iThemes Security, etc.) está bloqueando los scripts externos hacia api.zenovay.com

Vistas de página duplicadas

  • Asegúrese de haber añadido el fragmento una sola vez (no lo pegue en header.php Y en un hook de functions.php)
  • Compruebe si el contenido cargado mediante AJAX está volviendo a activar el seguimiento
  • Revise la configuración del plugin de caché

Compras de WooCommerce faltantes

  • Verifique que el fragmento se carga en la página de agradecimiento
  • Compruebe el flujo de pago de WooCommerce (multipágina vs una sola página) — algunos procesos de pago omiten el hook estándar woocommerce_thankyou
  • Asegúrese de que el modo de compatibilidad con jQuery no esté interfiriendo

Problemas de caché

  • Excluya las rutas /_z/ de la caché de páginas (consulte Compatibilidad con plugins de caché más arriba)
  • Vacíe todas las cachés después de los cambios de configuración
  • Pruebe en modo incógnito/privado

Consideraciones de seguridad

Content Security Policy

Si su sitio usa una cabecera CSP, permita Zenovay:

script-src 'self' https://api.zenovay.com;
connect-src 'self' https://api.zenovay.com;

Con el proxy first-party, solo se necesita 'self'.

Excluir páginas sensibles

function zenovay_should_track() {
    if (is_admin()) return false;
    if (is_page(array('my-account', 'checkout'))) return false;
    if (current_user_can('manage_options')) return false;
    return true;
}

Cumplimiento de Privacidad

Para el seguimiento sin cookies, añada data-cookieless="true":

<script defer
    data-tracking-code="YOUR_TRACKING_CODE"
    data-cookieless="true"
    src="https://api.zenovay.com/z.js"></script>

En este modo no se establecen cookies ni entradas en el almacenamiento local — los IDs de visitante solo existen durante la pestaña actual. Consulte la Guía de Cumplimiento de Privacidad para obtener todos los detalles.

Integración con el consentimiento de cookies

Con plugins de consentimiento populares:

// CookieYes — load tracking after consent
document.addEventListener('cookieyes_consent_update', function(e) {
    if (e.detail.accepted.includes('analytics')) {
        var s = document.createElement('script');
        s.defer = true;
        s.src = 'https://api.zenovay.com/z.js';
        s.dataset.trackingCode = 'YOUR_TRACKING_CODE';
        document.head.appendChild(s);
    }
});

// Complianz — same pattern
document.addEventListener('cmplz_fire_statistics', function() {
    var s = document.createElement('script');
    s.defer = true;
    s.src = 'https://api.zenovay.com/z.js';
    s.dataset.trackingCode = 'YOUR_TRACKING_CODE';
    document.head.appendChild(s);
});

Consulte la Guía de Cumplimiento con GDPR para una configuración detallada.


Recursos relacionados


¿Necesita ayuda? Contacte a [email protected] o visite nuestro Centro de ayuda.

¿Fue útil esta página?