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

使用自定义插件实现WooCommerce事件追踪时_xyz未定义的解决求助

WooCommerce商品浏览追踪报错:_xyz is not defined 的解决办法

你遇到的_xyz is not defined错误,核心原因是执行追踪脚本时,追踪工具的全局对象未准备就绪,或是代码存在语法、变量名匹配问题,以下是具体解决步骤:

1. 统一变量名

错误提示是_xyz is not defined,但你代码里调用的是xyz.push(),先确认追踪工具官方要求的全局变量名——是xyz还是_xyz,把代码里的变量名完全统一。比如工具要求用_xyz,就把脚本里的xyz改成_xyz。

2. 修复JS语法错误

你当前的追踪脚本有两处语法问题,会直接导致执行失败:

  • product_name未加引号,也没转义特殊字符(比如商品名里的引号、换行),会触发JS语法报错
  • product_price后面多了一个多余的逗号

修正后的函数代码如下:

public function viewed_product()
{
    $product_id = get_the_ID();
    $product = wc_get_product($product_id);
    if (!$product) return; // 避免商品不存在时报错
?>
    <script>
        // 先判断全局对象是否存在再执行
        if (typeof _xyz !== 'undefined') {
            _xyz.push({
                "track": "productview",
                "product_id": <?php echo $product_id ?>,
                "product_name": "<?php echo esc_js($product->get_name()) ?>",
                "product_price": <?php echo $product->get_price() ?>
            });
        }
    </script>
<?php
}

3. 调整脚本加载时机

虽然你用wp_head加载了核心追踪代码,但如果核心代码是外部脚本,可能存在加载延迟。可以把商品追踪脚本的输出时机改成wp_footer,确保在页面所有脚本加载完成后执行:

// 替换原来的add_action
add_action('wp_footer', array($this, 'viewed_product'), 15);

同时在函数里加判断,只在商品页面输出脚本:

public function viewed_product()
{
    if (!is_product()) return; // 仅商品页面执行
    $product_id = get_the_ID();
    $product = wc_get_product($product_id);
    if (!$product) return;
?>
    <!-- 脚本内容同上面修正后的代码 -->
<?php
}

4. 验证核心追踪代码加载状态

打开商品页面源代码,搜索_xyz(或你统一后的变量名):

  • 如果找不到,说明wp_head里的核心代码未正确输出,检查核心代码的添加逻辑
  • 如果核心代码是外部脚本,检查URL是否正确,有没有被浏览器广告拦截器拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:25:53