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

如何检测WooCommerce订单关联商品是否存在,处理已删除商品?

解决WooCommerce遍历订单商品时遇到已删除商品卡住的问题

这问题我之前做订单导出功能时也碰到过!核心原因是当商品被删除后,$item_data->get_product()不会返回有效的WC_Product对象,而是false或者null,这时候直接调用get_name()、get_sku()这类方法就会触发致命错误,导致脚本直接卡住终止。

咱们只需要在代码里加个商品有效性判断,就能跳过已删除的商品,继续处理其他商品,同时给用户友好提示。修改后的代码如下:

foreach ($order->get_items() as $item_id => $item_data) { 
    // 获取对应WC_Product对象实例
    $product = $item_data->get_product(); 

    // 先判断商品是否有效存在
    if ( ! $product || ! $product instanceof WC_Product ) {
        // 获取原始商品ID(即使商品被删,订单item里还会保留这个ID)
        $original_product_id = $item_data->get_meta('_product_id');
        // 显示提示信息
        echo '1 x 商品已不存在(原商品ID:' . $original_product_id . ')<br />';
        // 跳过当前商品,继续处理下一个
        continue;
    }

    // 商品正常存在时的逻辑
    $product_name = $product->get_name(); 
    $item_quantity = $item_data->get_quantity(); 
    $product_sku = $product->get_sku();

    echo $item_quantity . ' x ' . $product_name . ' (' . $product_sku . ')<br />' ; 
}

关键细节说明:

  • 有效性判断:用! $product || ! $product instanceof WC_Product双重判断,确保覆盖所有商品不存在的情况(比如返回false、null或者非WC_Product的对象)。
  • 保留原始商品ID:即使商品被删除,订单的item数据里依然会存储原始的商品ID(存在_product_id元数据里),显示这个ID能帮助管理员定位问题。
  • continue语句:遇到无效商品时,直接跳过后续逻辑,进入下一次循环,避免脚本报错终止。

这样修改后,不管订单里有没有已删除的商品,代码都能顺畅运行,同时给用户清晰的提示信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:26:01