如何从WooCommerce订单项获取未关联变体的产品属性值
解决WooCommerce订单项获取非变体属性的问题
当订单项是变体产品时,直接从变体对象里拿不到父产品的非变体属性——因为变体不会自动继承这类未关联变体的属性。你需要先判断当前产品是否为变体,若是则获取对应的父可变产品,再从父产品中提取目标属性。
修改后的代码如下:
foreach($wcOrder->get_items() as $item) { $wcProduct = $item->get_product(); if (is_object($wcProduct)) { // 先尝试从当前产品获取属性 $attributeValue = $wcProduct->get_attribute(MY_INTERNAL_ATTRIBUTE_NAME); // 如果当前产品是变体且未获取到值,从父产品获取 if (empty($attributeValue) && $wcProduct->is_type('variation')) { $parentProduct = $wcProduct->get_parent_product(); if ($parentProduct) { $attributeValue = $parentProduct->get_attribute(MY_INTERNAL_ATTRIBUTE_NAME); } } // 处理获取到的属性值 if (!empty($attributeValue)) { // ... 你的业务逻辑 } } }
代码说明:
- 先尝试直接从当前订单项关联的产品(可能是简单产品或变体)获取属性
- 如果当前产品是变体且没拿到值,调用
get_parent_product()获取父可变产品 - 从父产品中提取你需要的内部属性
- 确保属性名
MY_INTERNAL_ATTRIBUTE_NAME和你后台设置的属性别名完全一致
你也可以根据需求调整逻辑优先级,比如直接先判断产品类型,变体产品直接从父产品取值,上面的写法更灵活,能覆盖简单产品和变体两种场景。
内容的提问来源于stack exchange,提问作者drakanor
相关产品推荐
相关产品推荐

