当电子商务商品数量未知时,如何设置 Google 跟踪代码管理器 JavaScript 变量来捕获参数?

问题描述 投票:0回答:1

我正在尝试在 Google 跟踪代码管理器上设置数据层变量以捕获我们网站的电子商务数据。我可以成功捕获单个商品的 id、名称、价格和数量;但如果我想设置 GTM 来处理未知数量的项目,则在预览我的更改时,返回值似乎总是“未定义”。以下是成功触发的 dataLayer 自定义事件示例:

dataLayer.push({
  event: "AddToCart",
  ecommerce: {
    currency: "USD",
    items: [
      {
        item_id: "CTFBK",
        item_name: "Black Color Tissue Paper, 20x30\", Bulk 480 Sheet Flat Pack",
        price: 35.75,
        quantity: 1
      },
      {
        item_id: "18WK",
        item_name: "White Kraft Recycled Jewelry Boxes, 3.5x3.5x1\", 100 Pack, Fiber Fill",
        price: 49.2,
        quantity: 1
      },
      {
        item_id: "RBLBC",
        item_name: "Romantic Blooms Paper Gift Bag, Cub 8x4.75x10\", 250 Pack",
        price: 125,
        quantity: 3
      }
    ]
  },
  gtm.uniqueEventId: 25
})

我创建了一个名为“ecommerce.items”的数据层变量,其数据层变量名称为:“ecommerce.items”。在预览中,此变量返回以下数组:

[
  {
    item_id: "CTFBK",
    item_name: "Black Color Tissue Paper, 20x30\", Bulk 480 Sheet Fla" +
               "t Pack",
    price: 35.75,
    quantity: 1
  },
  {
    item_id: "18WK",
    item_name: "White Kraft Recycled Jewelry Boxes, 3.5x3.5x1\", 100 " +
               "Pack, Fiber Fill",
    price: 49.2,
    quantity: 1
  },
  {
    item_id: "RBLBC",
    item_name: "Romantic Blooms Paper Gift Bag, Cub 8x4.75x10\", 250 " +
               "Pack",
    price: 125,
    quantity: 3
  }
]

这是我插入到 JavaScript 变量的“全局变量名称”中的最新 JavaScript 函数,该函数应返回价格值数组:

function() {   
    var itemPrices = [];   
    var items = {{ecommerce.items}};      
    if (items && items.length > 0) {     
        for (var i = 0; i < items.length; i++) {       
            if (items[i].price) {         
                itemPrices.push(items[i].price);       
            }     
        }   
    }      
    return itemPrices; 
}

根据 GTM 预览中的“变量”选项卡,这将返回“未定义”。我可以采取什么不同的方法来返回每件商品的价格数组?

javascript google-tag-manager google-analytics-4 google-datalayer
1个回答
0
投票

您可以通过JavaScript从全局对象窗口获取dataLayer。

var data = window.dataLayer
    if(dataLayer) {
    var itemPrices = [];   
        var items = data;      
        if (items && items.length > 0) {     
            for (var i = 0; i < items.length; i++) {       
                if (items[i].price) {         
                    itemPrices.push(items[i].price);       
                }     
            }   
        }      
        return itemPrices; 
    }
© www.soinside.com 2019 - 2024. All rights reserved.