任务是当产品购物车中的产品数量达到时向分析发送事件。无法使用标准 woocommerce 挂钩,因为使用了 woocommerce 块。我已经伤透了头,也许告诉我能做什么。我已经到达 MutationObserver,但事件仍然没有触发(
function track_cart_quantity_change_js()
{
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
function sendCartUpdateEvent(productData) {
window.dataLayer = window.dataLayer || [];
dataLayer.push({
ecommerce: null
});
dataLayer.push({
'event': 'addToCart',
'ecommerce': {
'currencyCode': 'EUR',
'add': {
'products': [productData]
}
}
});
}
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.type === 'childList' || mutation.type === 'subtree') {
$('.woocommerce-cart-form__cart-item').each(function() {
var $row = $(this);
var product_id = $row.find('.product-remove > a').data('product_id');
var product_name = $row.find('.product-name').text().trim();
var product_quantity = parseInt($row.find('.qty').val());
var product_price = $row.find('.product-subtotal').text().trim().replace(/[^0-9.,]/g, '').replace(',', '.');
var product_brand = $row.find('.product-brand').text().trim();
var product_category = $row.find('.product-category').text().trim();
var product_variant = $row.find('.product-variant').text().trim();
var productData = {
id: product_id,
name: product_name,
brand: product_brand,
category: product_category,
variant: product_variant,
quantity: product_quantity,
price: product_price
};
sendCartUpdateEvent(productData);
});
}
});
});
var cartElement = document.querySelector('.woocommerce-cart-form');
if (cartElement) {
observer.observe(cartElement, {
childList: true,
subtree: true
});
}
$(document).on('change', '.qty', function() {
var $row = $(this).closest('.woocommerce-cart-form__cart-item');
var product_id = $row.find('.product-remove > a').data('product_id');
var product_name = $row.find('.product-name').text().trim();
var product_quantity = parseInt($(this).val());
var product_price = $row.find('.product-subtotal').text().trim().replace(/[^0-9.,]/g, '').replace(',', '.');
var product_brand = $row.find('.product-brand').text().trim();
var product_category = $row.find('.product-category').text().trim();
var product_variant = $row.find('.product-variant').text().trim();
var productData = {
id: product_id,
name: product_name,
brand: product_brand,
category: product_category,
variant: product_variant,
quantity: product_quantity,
price: product_price
};
sendCartUpdateEvent(productData);
});
});
</script>
<?php
}
add_action('wp_footer', 'track_cart_quantity_change_js');
如果
MutationObserver
不起作用,您可以采取相同的步骤来解决该问题:
如果卡元素已加载:
如果
MutationObserver
元素在初始化时不存在,则 .woocommerce-cart-form
将不起作用。确保购物车表格完全加载后设置观察者。
尝试:
var cartElement = document.querySelector('.woocommerce-cart-form');
if (cartElement) {
console.log('Cart element found, initializing observer...');
observer.observe(cartElement, {
childList: true,
subtree: true
});
} else {
console.log('Cart element not found.');
}
添加控制台日志以验证是否找到购物车元素并且观察者是否已初始化
调试观察者回调:
问题可能出在观察者的回调函数中。在回调中添加控制台日志以检查它是否被触发
var observer = new MutationObserver(function(mutations) {
console.log('Mutation observed:', mutations);
mutations.forEach(function(mutation) {
if (mutation.type === 'childList' || mutation.type === 'subtree') {
console.log('Child list or subtree change detected');
handleCartChange();
}
});
});
替代方法 - 手动触发:
替代方法:
$(document).on('change', '.qty', function() {
console.log('Quantity changed');
handleCartChange();
});
检查冲突:
检查事件的时间安排: