获取可变产品SKU:导出CSV时可变产品SKU为空问题求助
解决WooCommerce可变产品SKU导出为空的问题
你遇到的问题核心在于订单中的可变产品项对应的是变体产品,而非父可变产品:原来的代码用$item->get_product_id()拿到的是父产品ID,而父产品通常没有设置SKU(或者你实际需要的是变体的SKU),所以调用get_sku()会返回空值。
最佳解决方案:直接使用WooCommerce内置方法获取产品对象
WooCommerce的订单项对象已经封装了get_product()方法,它会自动返回当前订单项对应的实际产品(变体或普通产品),无需手动判断ID,这是最健壮的方式。修改你的代码如下:
修改构造函数
public function __construct($item, $order) { $this->item = $item; $this->order = $order; // 直接获取订单项对应的产品对象,自动处理变体 $this->product = $item->get_product(); }
可选:增加空值判断避免报错
为了防止特殊情况下产品对象不存在导致报错,你可以修改getSku()方法:
public function getSku() { // 检查产品对象是否存在,存在则返回SKU,否则返回空字符串 return $this->product ? $this->product->get_sku() : ''; }
手动判断变体ID的替代方案
如果你更倾向于手动处理ID逻辑,可以通过get_variation_id()获取变体ID(普通产品此值为0),优先使用变体ID来获取产品:
public function __construct($item, $order) { $this->item = $item; $this->order = $order; // 优先使用变体ID,没有则用父产品ID $target_product_id = $item->get_variation_id() ?: $item->get_product_id(); $this->product = wc_get_product($target_product_id); }
为什么原来的代码不生效?
你之前尝试改为variable_id是找错了方法名——WooCommerce订单项获取变体ID的方法是get_variation_id(),而非variable_id。而且直接替换ID也不如get_product()方法可靠,因为它还会处理产品类型兼容、缓存等细节。
内容的提问来源于stack exchange,提问作者AspiringProgrammer
相关产品推荐
相关产品推荐

