(function() {
// Attendre que Klaviyo (_learnq) soit chargé
function sendKlaviyoCartEvent(cartData) {
if (typeof window._learnq === "undefined") return setTimeout(function() { sendKlaviyoCartEvent(cartData); }, 500);
window._learnq.push(['track', 'Cart URL Generated', cartData]);
console.log("Klaviyo Cart Event Sent:", cartData);
}
// Récupération des infos panier et client depuis les inputs WooCommerce
function getCartAndCustomerData() {
// Tu peux passer ces données via PHP pour fiabilité maximum si besoin
var cartKey = localStorage.getItem('persistent_cart_key') || '';
var cartUrl = window.location.origin + '/panier/' + cartKey;
// Infos client
var email = document.querySelector('#billing_email') ? document.querySelector('#billing_email').value : '';
var firstName = document.querySelector('#billing_first_name') ? document.querySelector('#billing_first_name').value : '';
var lastName = document.querySelector('#billing_last_name') ? document.querySelector('#billing_last_name').value : '';
var phone = document.querySelector('#billing_phone') ? document.querySelector('#billing_phone').value : '';
// Infos panier via un dataLayer ou un JS personnalisé (WooCommerce ne fournit pas tout en JS natif)
// Idéalement, tu ajoutes le détail panier en JSON via un data-attribute sur body ou par une variable PHP exportée
// Exemple ci-dessous :
var cartDataObj = window.jidaCartData || null; // window.jidaCartData doit être généré côté PHP pour exposer le détail du panier
var items = [];
var total = 0;
var itemCount = 0;
if (cartDataObj && cartDataObj.items) {
items = cartDataObj.items;
items.forEach(function(item) {
total += parseFloat(item.price) * parseInt(item.quantity);
itemCount += parseInt(item.quantity);
});
}
// Construction de l'objet à envoyer à Klaviyo
return {
CartURL: cartUrl,
CartKey: cartKey,
value: total,
ItemCount: itemCount,
Items: items,
Currency: cartDataObj ? cartDataObj.currency : 'EUR',
CustomerName: (firstName + ' ' + lastName).trim(),
CustomerEmail: email,
CustomerPhone: phone
};
}
// Déclenche l'envoi au chargement du checkout ou à chaque modification des champs
function setupKlaviyoCartEvent() {
// Premier envoi rapide
setTimeout(function() {
var data = getCartAndCustomerData();
sendKlaviyoCartEvent(data);
}, 2000);
// Réenvoi à chaque changement dans les champs du client
document.addEventListener('change', function(e) {
if (e.target && e.target.id && e.target.id.startsWith('billing_')) {
var data = getCartAndCustomerData();
sendKlaviyoCartEvent(data);
}
});
}
// À toi d'injecter la variable window.jidaCartData côté PHP :
//
// Lance le script si c'est la page de checkout
if (window.location.pathname.indexOf('/finalisation-commande') !== -1 || document.body.classList.contains('woocommerce-checkout')) {
setupKlaviyoCartEvent();
}
})();