(function () {
// 1. GTM Installation Snippet
(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'GTM-K829R48S');
// 2. Initialize the dataLayer if not already defined
window.dataLayer = window.dataLayer || [];
// 3. Helper Function to Extract Product Details
function extractProductDetails(item) {
const product = item?.product || {};
return {
item_id: item.id || 'unknown',
item_name: product.title || 'unknown',
price: item.price?.amount || '0.00',
quantity: item.quantity || 1,
currency: item.price?.currencyCode || 'unknown',
category: product.type || 'unknown',
vendor: product.vendor || 'unknown',
};
}
// 4. Page Viewed Event
analytics.subscribe('page_viewed', function (event) {
const pageData = event?.data?.page || {};
const shopData = event?.data?.shop || {};
window.dataLayer.push({
event: 'page_viewed',
pageType: pageData.type || 'unknown',
shopName: shopData.name || 'Shopify Store',
currency: shopData.currency || 'USD',
});
console.log('page_viewed event sent:', pageData);
});
// 5. Product Viewed Event - Updated with currency at ecommerce level
analytics.subscribe('product_viewed', function (event) {
const productVariant = event?.data?.productVariant || {};
const productDetails = extractProductDetails(productVariant);
if (productDetails.item_id !== 'unknown') {
window.dataLayer.push({
event: 'product_viewed',
ecommerce: {
currency: productDetails.currency,
items: [productDetails],
},
});
console.log('product_viewed event sent with product data:', productDetails);
} else {
console.error('No valid product data found for product_viewed event');
}
});
// 6. Add to Cart Event
analytics.subscribe('product_added_to_cart', function (event) {
const cartLine = event?.data?.cartLine || {};
const productVariant = cartLine?.merchandise || {};
const product = productVariant?.product || {};
const productDetails = {
item_id: productVariant.id || 'unknown',
item_name: product.title || 'unknown',
price: productVariant.price?.amount || '0.00',
quantity: cartLine.quantity || 1,
currency: productVariant.price?.currencyCode || 'unknown',
category: product.type || 'unknown',
vendor: product.vendor || 'unknown',
};
if (productDetails.item_id !== 'unknown') {
window.dataLayer.push({
event: 'add_to_cart',
ecommerce: {
items: [productDetails],
},
});
console.log('add_to_cart event sent with product data:', productDetails);
} else {
console.error('No valid product data found for add_to_cart event');
}
});
// 7. Cart Viewed Event
analytics.subscribe('cart_viewed', function (event) {
const cartData = event?.data?.cart || {};
const items = cartData.lineItems?.map(extractProductDetails) || [];
if (items.length > 0) {
window.dataLayer.push({
event: 'cart_viewed',
ecommerce: {
items: items,
},
});
console.log('cart_viewed event sent with product data:', items);
}
});
analytics.subscribe('checkout_started', function (event) {
const checkoutData = event?.data?.checkout;
const products = checkoutData?.lineItems?.map((item) => ({
item_id: item.id || 'unknown',
item_name: item.title || 'unknown',
price: item.finalLinePrice?.amount || '0.00',
quantity: item.quantity || 1,
currency: item.finalLinePrice?.currencyCode || 'unknown',
category: item.variant?.product?.type || 'unknown',
vendor: item.variant?.product?.vendor || 'unknown',
}));
if (products && products.length > 0) {
window.dataLayer.push({
event: 'begin_checkout',
ecommerce: {
currency: checkoutData?.currencyCode || 'unknown',
value: parseFloat(checkoutData?.totalPrice?.amount || 0).toFixed(2),
items: products
}
});
console.log('begin_checkout event sent with product data:', products);
} else {
console.error('No product data found for begin_checkout event');
}
});
// Purchase event with corrected product details mapping
analytics.subscribe('checkout_completed', function (event) {
const checkoutData = event?.data?.checkout || {};
const billingAddress = checkoutData?.billingAddress || {};
const lineItems = checkoutData.lineItems || [];
// User data structure
const userData = {
first_name: billingAddress?.firstName || 'unknown',
last_name: billingAddress?.lastName || 'unknown',
email: checkoutData?.email || 'unknown',
phone: billingAddress?.phone || 'unknown',
address_1: billingAddress?.address1 || 'unknown',
address_2: billingAddress?.address2 || '',
city: billingAddress?.city || 'unknown',
province: billingAddress?.province || 'unknown',
country: billingAddress?.country || 'unknown',
zip: billingAddress?.zip || 'unknown'
};
// Map line items with corrected product details
const items = lineItems.map(item => ({
item_id: item.id || 'unknown',
item_name: item.title || item.variant?.product?.title || 'unknown',
price: item.finalLinePrice?.amount || '0.00',
quantity: item.quantity || 1,
currency: item.finalLinePrice?.currencyCode || 'unknown',
category: item.variant?.product?.type || 'unknown',
vendor: item.variant?.product?.vendor || 'unknown'
}));
// Create and push purchase event
const purchaseEvent = {
event: 'purchase',
ecommerce: {
transaction_id: checkoutData.order?.id || 'unknown',
value: parseFloat(checkoutData.totalPrice?.amount || 0).toFixed(2),
currency: checkoutData.currencyCode || 'unknown',
items: items
},
user: userData
};
window.dataLayer.push(purchaseEvent);
console.log('purchase event sent to dataLayer:', purchaseEvent);
});
})();
Equs Code - Riding apparel
Skip to content
Old time favorites
Dive into our iconic products
Crazy about belts
The perfect complement to enhance any outfit
The most comfortable breeches for daily training
Our gorgeous "shaping breeches" are designed for maximum confidence, comfort and flexibility when training. The knee patch is made of a soft, durable silicone that provides extraordinary grip when in contact with the saddle.
Shop here
Sign up to receive the latest news!
Choosing a selection results in a full page refresh.
Opens in a new window.