Intégration WordPress
Ajoutez des analytics respectueux de la vie privée à votre site WordPress. Suivez les visiteurs, comprenez leurs comportements et développez votre audience sans compromettre leur vie privée.
Configuration manuelle uniquement. Zenovay ne fournit pas actuellement de plugin WordPress officiel ni d'extension WooCommerce. Les instructions ci-dessous utilisent le script de suivi standard avec des snippets dans header.php / functions.php, qui fonctionnent de manière fiable sur toutes les installations WordPress. Partout où vous voyez des références à un « suivi automatique » ci-dessous, cela désigne un simple hook add_action() que vous collez dans votre thème — pas un plugin installable.
Démarrage rapide
| Méthode | Idéal pour | Temps de configuration |
|---|---|---|
Snippet header.php | Thèmes personnalisés | 3 minutes |
Hook functions.php | Sites gérés par des développeurs avec exclusion des administrateurs | 5 minutes |
wp_enqueue_script | Sites qui utilisent strictement l'enfilement de scripts WordPress | 5 minutes |
Méthode 1 : En-tête du thème (recommandée)
Ajoutez dans le fichier header.php de votre thème avant </head> :
<!-- Zenovay Analytics -->
<script defer data-tracking-code="YOUR_TRACKING_CODE" src="https://api.zenovay.com/z.js"></script>
C'est l'installation la plus simple. Fonctionne sur tous les thèmes ayant un fichier header.php avec la balise </head> visible dans le template.
Méthode 2 : Hook functions.php
Pour plus de contrôle (exclure les administrateurs, chargement conditionnel, etc.), ajoutez dans le fichier functions.php de votre thème :
/**
* 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éthode 3 : wp_enqueue_script
Pour une gestion correcte des scripts selon les conventions 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');
Suivi WooCommerce
Suivez les vues de produits, les ajouts au panier et les achats sur votre boutique WooCommerce. Ajoutez dans le fichier functions.php de votre thème :
/**
* 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');
Suivi des formulaires de contact
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);
Ou utilisez l'événement 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);
Identifier les utilisateurs connectés
Identifiez les utilisateurs WordPress pour un suivi inter-sessions :
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');
Configuration du suivi first-party
Contournez les bloqueurs de publicités en proxifiant via votre domaine. Consultez le Guide de suivi first-party pour la configuration multi-plateforme. Règles de réécriture spécifiques à 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');
Mettez ensuite à jour votre script de suivi pour utiliser le proxy :
<script defer
data-tracking-code="YOUR_TRACKING_CODE"
data-api-url="/_z/"
src="/_z/script.js">
</script>
Après avoir ajouté les règles de réécriture, allez dans Settings → Permalinks et cliquez sur Save Changes pour vider le cache de réécriture.
Compatibilité avec les plugins de cache
Excluez les routes first-party de Zenovay de votre plugin de cache afin que les événements soient correctement transmis.
WP Super Cache
Ajoutez dans wp-content/wp-cache-config.php :
$cache_rejected_uri = array(
'/_z/',
);
W3 Total Cache
Allez dans Performance → Page Cache et ajoutez /_z/ dans 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 — ajoutez /_z/.
Configuration Multisite
Pour les réseaux WordPress Multisite, le script de suivi vit dans le fichier header.php ou functions.php de votre thème et fonctionne par site tel que configuré. Pour utiliser un seul code de suivi sur tout le réseau :
/**
* 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');
Sinon, configurez un code de suivi différent par site en le codant en dur dans le thème de chaque site.
Notes de performance
Le tracker Zenovay est :
- Différé — ne bloque pas le rendu de la page
- Léger — moins de 23 Ko compressé (gzip)
- Livré via CDN — mis en cache en périphérie dans le monde entier
Chargement conditionnel
Ignorez le suivi sur des pages spécifiques :
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');
Dépannage
Script ne se charge pas
- Consultez le code source de la page (Cmd/Ctrl+U) et recherchez
<script defer data-tracking-code=...>entre<head>et</head> - Vérifiez que votre code de suivi correspond à la valeur dans le tableau de bord Zenovay
- Ouvrez la console du navigateur et vérifiez les erreurs JavaScript
- Désactivez temporairement la mise en cache pour tester
- Vérifiez si un plugin de sécurité (Wordfence, iThemes Security, etc.) bloque les scripts externes vers
api.zenovay.com
Pages vues en double
- Assurez-vous d'avoir ajouté le snippet une seule fois (ne collez pas à la fois dans
header.phpET dans un hookfunctions.php) - Vérifiez si du contenu chargé en AJAX re-déclenche le suivi
- Vérifiez la configuration du plugin de cache
Achats WooCommerce manquants
- Vérifiez que le snippet se charge sur la page de remerciement
- Vérifiez le flux de paiement WooCommerce (multi-page vs page unique) — certains paiements ignorent le hook standard
woocommerce_thankyou - Assurez-vous que le mode de compatibilité jQuery n'interfère pas
Problèmes de mise en cache
- Excluez les routes
/_z/du cache de pages (voir la compatibilité avec les plugins de cache ci-dessus) - Videz tous les caches après des changements de configuration
- Testez en mode de navigation privée
Considérations de sécurité
Content Security Policy
Si votre site utilise un en-tête CSP, autorisez Zenovay :
script-src 'self' https://api.zenovay.com;
connect-src 'self' https://api.zenovay.com;
Avec le proxy first-party, seul 'self' est nécessaire.
Exclure les pages 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;
}
Conformité à la confidentialité
Pour un suivi sans cookies, ajoutez data-cookieless="true" :
<script defer
data-tracking-code="YOUR_TRACKING_CODE"
data-cookieless="true"
src="https://api.zenovay.com/z.js"></script>
Dans ce mode, aucun cookie ni entrée de stockage local n'est défini — les identifiants de visiteurs n'existent que pour l'onglet en cours. Consultez le Guide de conformité à la confidentialité pour tous les détails.
Intégration avec les plugins de consentement aux cookies
Avec les plugins de consentement populaires :
// 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);
});
Consultez le Guide de conformité GDPR pour une configuration détaillée.
Ressources associées
- Suivi first-party
- Événements personnalisés
- Entonnoirs de conversion
- Conformité GDPR
- Article d'aide sur l'intégration WordPress
Besoin d'aide ? Contactez [email protected] ou visitez notre Centre d'aide.