无法将 google 广告事件添加到 woocoommerce_add_to_cart 挂钩
Cannot add google ads event to woocoommerce_add_to_cart hook
虽然这应该是几分钟的工作,但我花了 10 多个小时试图弄清楚为什么以下代码段有效但不如预期,尽管该网站没有使用 ajax add_to_cart 事件。
出于一个非常奇怪的原因,当代码处于活动状态时页面会刷新。我意识到这一点是因为控制台(added_to_cart)中的日志在加载几分钟后消失了。
奇怪的是,它与我正在使用的挂钩无关(尽管我也尝试了 woocommerce_add_to_cart_validation 并得到完全相同的结果)因为如果我只留下 console.log 消息它不会'有相同的行为。就像 gtag 脚本强制重新加载页面一样。
通常这应该不是问题,因为事件实际上发送到 google 广告,但是还有其他脚本应该 运行 之后却没有(例如 google 分析和其他)。
add_action( 'woocommerce_add_to_cart', 'custom_add_to_cart', 10, 2 );
function custom_add_to_cart( $cart_item_key, $product_id ) {
$_product = wc_get_product($product_id);
$price = $_product->get_price();
$current_url = home_url( $_SERVER['REQUEST_URI'] );
?>
console.log('added_to_cart');
<script async src="https://www.googletagmanager.com/gtag/js?id=<?php echo ADS_ID ?>"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '<?php echo ADS_ID ?>');
</script>
<script type="text/javascript">
function gtag_report_conversion(url) {
var callback = function () {
if (typeof(url) != 'undefined') {
window.location = url;
}
};
gtag('event', 'conversion', {
'send_to': '<? echo ADS_ADD_TO_CART; ?>',
'value': <?php echo $price ?>,
'currency': 'EUR',
'event_callback': callback
});
return false;
}
gtag_report_conversion('<?php echo $current_url; ?>');
</script>
<?php
}
有什么想法吗?
您的代码不起作用,因为 woocommerce_add_to_cart 在后端触发,而您正试图在它无法呈现的地方呈现 JavaScript 代码被执行。
如果您想捕获 add-to-cart 事件,请使用 WooCommerce JavaScript 事件或在 add-to-cart 按钮上使用旧的 addEventListener()。
我设法弄清楚发生了什么,但我不知道我是怎么错过的。
这是以防万一
我不得不改变:
if (typeof(url) != 'undefined') {
window.location = url;
}
至:
if (typeof(url) != 'undefined') {
//window.location = url;
}
所以它会停止重定向
虽然这应该是几分钟的工作,但我花了 10 多个小时试图弄清楚为什么以下代码段有效但不如预期,尽管该网站没有使用 ajax add_to_cart 事件。
出于一个非常奇怪的原因,当代码处于活动状态时页面会刷新。我意识到这一点是因为控制台(added_to_cart)中的日志在加载几分钟后消失了。 奇怪的是,它与我正在使用的挂钩无关(尽管我也尝试了 woocommerce_add_to_cart_validation 并得到完全相同的结果)因为如果我只留下 console.log 消息它不会'有相同的行为。就像 gtag 脚本强制重新加载页面一样。
通常这应该不是问题,因为事件实际上发送到 google 广告,但是还有其他脚本应该 运行 之后却没有(例如 google 分析和其他)。
add_action( 'woocommerce_add_to_cart', 'custom_add_to_cart', 10, 2 );
function custom_add_to_cart( $cart_item_key, $product_id ) {
$_product = wc_get_product($product_id);
$price = $_product->get_price();
$current_url = home_url( $_SERVER['REQUEST_URI'] );
?>
console.log('added_to_cart');
<script async src="https://www.googletagmanager.com/gtag/js?id=<?php echo ADS_ID ?>"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '<?php echo ADS_ID ?>');
</script>
<script type="text/javascript">
function gtag_report_conversion(url) {
var callback = function () {
if (typeof(url) != 'undefined') {
window.location = url;
}
};
gtag('event', 'conversion', {
'send_to': '<? echo ADS_ADD_TO_CART; ?>',
'value': <?php echo $price ?>,
'currency': 'EUR',
'event_callback': callback
});
return false;
}
gtag_report_conversion('<?php echo $current_url; ?>');
</script>
<?php
}
有什么想法吗?
您的代码不起作用,因为 woocommerce_add_to_cart 在后端触发,而您正试图在它无法呈现的地方呈现 JavaScript 代码被执行。
如果您想捕获 add-to-cart 事件,请使用 WooCommerce JavaScript 事件或在 add-to-cart 按钮上使用旧的 addEventListener()。
我设法弄清楚发生了什么,但我不知道我是怎么错过的。 这是以防万一 我不得不改变:
if (typeof(url) != 'undefined') {
window.location = url;
}
至:
if (typeof(url) != 'undefined') {
//window.location = url;
}
所以它会停止重定向