You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PHP变量传递至GA数据层多产品数组以跟踪全部订单商品

解决GA仅跟踪最后一件商品的问题

问题出在你当前的代码中,PHP循环结束后,$order变量只保留了最后一个商品的数据,所以JavaScript里只能拿到最后一件商品的信息。要获取所有商品详情,你需要先在PHP中收集所有订单商品的数据,再传递给Google Tag Manager的数据层。

步骤1:修改PHP代码,收集所有商品数据

在原有循环中,新增一个数组来存储每一件商品的信息,最后将数组转为JSON格式(方便JS解析):

<?php
// 初始化数组存储所有商品数据
$productsData = [];
$i = 1;

foreach($previousorder->LineItems->OrderDetailLineItems as $order){ 
    $previousOrderHTML = ""; 
    if($i == 2){ 
        $i = 1; 
        $class = " odd"; 
    }else{ 
        $i++; 
        $class = ""; 
    } 

    if(!$order->LineDiscountAmountGross == "0"){ 
        $lineDiscount = sprintf('<span class="required">-%s</span>', $locale->formatCurrency($order->LineDiscountAmountGross, $nwc->getTemplateValue("lb_CurrencySymbol"))); 
    }else{ 
        $lineDiscount = "-"; 
    } 

    $previousOrderHTML .= sprintf('<tr><td align="left" valign="top" class="extra-padding first-column details-row-one%s">%s</td><td align="left" valign="top" class="item-name extra-padding details-row-one%s">%s %s %s', $class, $order->ProductCode, $class, $order->ProductGroupName, $order->Size, $order->Colour); 

    if(isset($order->BundleProductList->PriceListBundleProductList) && count($order->BundleProductList->PriceListBundleProductList) >= 1){ 
        $previousOrderHTML .= '<span class="offer-small">'; 
        foreach($order->BundleProductList->PriceListBundleProductList as $bundleItem){ 
            $previousOrderHTML .= sprintf("<br />- %s %s %s (%s) - %s %s", $bundleItem->ProductGroupName, $bundleItem->Size, $bundleItem->FabricColour, $bundleItem->ProductCode, $nwc->getValue("lb_RRP"), $locale->FormatCurrency($bundleItem->Original_GROSS_Price)); 
        } 
        $previousOrderHTML .= '</span>'; 
    } 

    $previousOrderHTML .= sprintf('</td><td align="left" valign="top" class="extra-padding details-row-one%s">%s</td><td align="center" valign="top" class="extra-padding details-row-one%s">%s</td><td align="right" valign="top" class="extra-padding details-row-one%s">%s</td></td><td align="right" valign="top" class="extra-padding details-row-one last-column%s">%s</td></tr>', $class, $locale->formatCurrency($order->RRP, $nwc->getTemplateValue("lb_CurrencySymbol")), $class, $order->Quantity, $class, $lineDiscount, $class, $locale->formatCurrency($order->GrossDiscountPrice, $nwc->getTemplateValue("lb_CurrencySymbol"))); 

    echo $previousOrderHTML; 

    // 关键:将当前商品的核心信息加入数组
    $productsData[] = [
        'id' => $order->ProductCode,
        'name' => $order->ProductGroupName,
        'price' => $order->RRP,
        'quantity' => $order->Quantity
        // 如果需要额外字段(如分类、品牌),可在此添加
    ];
}

// 将商品数组转为JSON字符串,供JS使用
$productsJson = json_encode($productsData);
?>

步骤2:修改JavaScript代码,传入所有商品数据

不再单独定义单个商品的变量,直接使用PHP生成的JSON数组,传递给dataLayer的products字段:

<script type="text/javascript"> 
$(function(){ 
    var cartTot = '<?=$previousorder->TotalOrderAmountExVAT;?>'; 
    var curr = '<?=$ShoppingCartSummary->Currency;?>'; 
    var ref = '<?=$previousorder->OurReferenceNumber;?>'; 
    var vatx = '<?=$previousorder->TotalVATAmount;?>'; 
    // 解析PHP传递的商品JSON数组
    var products = <?=$productsJson;?>;

    dataLayer.push({ 
        'ecommerce': { 
            'purchase': { 
                'actionField': { 
                    'id': ref, // 交易ID,必填
                    'affiliation': 'Online Store',
                    'revenue': cartTot, // 注意:GA的revenue需包含税费和运费,若当前值不含税,需调整为含税总额
                    'tax': vatx, 
                    'shipping': '', 
                }, 
                'products': products // 传入所有商品的数组
            } 
        } 
    }); 
});
</script>

额外注意事项

  • 确认revenue字段的正确性:Google Analytics要求revenue是订单的总交易额(包含税费、运费),如果你的$previousorder->TotalOrderAmountExVAT是不含税金额,需要替换为含税总额的字段。
  • 如果有捆绑商品(Bundle)需要单独跟踪,可以在$productsData中添加捆绑商品的条目,或者根据GA的ecommerce规范调整字段。

内容的提问来源于stack exchange,提问作者Aaron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:10:40