无法将 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;
}

所以它会停止重定向