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

WooCommerce访问商品详情页自动加购出现get_id()空对象错误如何解决

错误产生原因

这个报错的核心原因是全局$product对象在非商品详情页场景下未被初始化:

  • 你使用的template_redirect是全站全局触发的钩子,不止商品详情页,访问首页、分类页、订单页、购物车页等所有前端页面都会触发这个钩子
  • 只有在标准WooCommerce商品详情页上下文中,全局$product才会被赋值为当前商品的WC_Product对象,其他场景下$product为null,此时直接调用get_id()方法就会抛出对应错误
修复方案

你需要先添加前置判断,只有满足「当前是商品详情页 + 商品对象有效」的条件才执行加购逻辑,优化后代码如下:

add_action( 'template_redirect', 'add_product_to_cart' );
function add_product_to_cart() {
    // 仅前端商品详情页执行逻辑
    if ( ! is_admin() && is_product() ) {
        global $product;
        // 额外校验商品对象有效性,兼容异常场景
        if ( ! $product instanceof WC_Product ) {
            $product = wc_get_product( get_queried_object_id() );
            if ( ! $product ) return;
        }
        $product_id = $product->get_id();
        
        // 直接用WC原生方法判断商品是否已在购物车,无需自行循环
        if ( ! WC()->cart->find_product_in_cart( WC()->cart->generate_cart_id( $product_id ) ) ) {
            WC()->cart->add_to_cart( $product_id );
        }
    }
}

修复点说明

  • 新增is_product()判断,限定逻辑仅在商品详情页执行
  • 新增$product有效性校验,即使全局商品对象异常也可以通过当前查询ID获取商品,避免空对象调用
  • 替换自行循环购物车的逻辑为WooCommerce原生的find_product_in_cart方法,代码更简洁兼容性更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:36:05