在收到的 WooCommerce 订单的 HEAD 中包含一些 javascript 代码

问题描述

目标:我需要在 Woocommerce 订单确认页面(即购买后的页面)上包含一个用于特定跟踪的事件代码段。我必须将 order_idcurrencytotal 传递给跟踪器。这是我写的代码

function wh_CustomreadOrder($order_id)
{
    //getting order object
    $order = wc_get_order($order_id);
    echo  "<script> gtag('event','conversion',{ 'send_to': 'AW-995109926/CWeECK-epPYBEKbYwNoD','value': '".$order->get_total()."','currency': '".$order->currency."','transaction_id': '".$order_id."' }); </script>";
}
add_action('woocommerce_thankyou','wh_CustomreadOrder');

包括页面上正确的代码并将相关信息传递给跟踪器。但是这段代码并没有出现在页面<head>中;它出现在体内。 根据说明,此代码必须放在 <head> 中。

我还没有找到允许这种控制的片段插件。 我还有其他方法可以实现这一目标吗?

如果我要在 <head> 的所有页面上包含此代码,但将其包装在检查 URL 的 if 语句中,/checkout/order-received/{order-id}/ 并在为 true 时触发,是否可能还是有其他方法

解决方法

您可以使用以下代码在“已收到订单”页面的头部注入您的 Javascript 代码:

add_action( 'wp_head','wc_custom_redirect_after_purchase' );
function wc_custom_redirect_after_purchase() {
    if ( ! is_wc_endpoint_url('order-received') ) return;
    global $wp;

    // If order_id is defined
    if ( isset($wp->query_vars['order-received']) && absint($wp->query_vars['order-received']) > 0 ) :

    $order_id       = absint($wp->query_vars['order-received']); // The order ID
    $order          = wc_get_order($order_id ); // The WC_Order object
    
    $send_to        = 'AW-995109926/CWeECK-epPYBEKbYwNoD';
    $transaction_id = empty($order->get_transaction_id()) ? $order_id : $order->get_transaction_id(); // The transaction ID
    
    ?>
    <script type="text/javascript">
    gtag('event','conversion',{
        'send_to'       : '<?php echo $send_to; ?>','value'         : '<?php echo $order->get_total(); ?>','currency'      : '<?php echo $order->get_currency(); ?>','transaction_id': '<?php echo $transaction_id; ?>' 
    });
    </script>
    <?php
    endif;
}

代码位于活动子主题(或活动主题)的functions.php 文件中。它应该可以工作。