使用自定义插件实现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
相关产品推荐
相关产品推荐

