Si bien debería ser un trabajo de unos minutos, me tomó más de 10 horas tratar de averiguar por qué el siguiente fragmento funciona pero no como se esperaba, aunque el sitio no usa ajax para eventos add_to_cart.
Por una razón muy extraña, la página se actualiza cuando el código está activo. Me doy cuenta de esto porque el registro en la consola (added_to_cart) desaparece después de unos momentos de carga. Lo extraño es que no tiene nada que ver con el gancho que estoy usando (aunque también probé woocommerce_add_to_cart_validation con exactamente los mismos resultados) porque si dejo solo el mensaje console.log no tiene el mismo comportamiento. Es como si el script de gtag forzara la recarga de una página.
Normalmente, esto no debería ser un problema porque el evento se envía a los anuncios de Google; sin embargo, hay otros scripts que deberían ejecutarse después y que no lo hacen (como Google Analytics y otros).
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 }¿algunas ideas?
Tu código no funciona porque woocommerce_add_to_cart se activa en el backend y estás intentando renderizar el código JavaScript donde no se puede ejecutar.
Si desea capturar el evento de agregar al carrito, use los eventos de JavaScript de WooCommerce o use el antiguo addEventListener() en sus botones de agregar al carrito.
Me las arreglé para averiguar lo que está pasando y no sé cómo me perdí. aquí está en caso de que tuviera que cambiar de:
if (typeof(url) != 'undefined') { window.location = url; }a:
if (typeof(url) != 'undefined') { //window.location = url; }por lo que detendría la redirección