遍历订单项目时,如何获取WooCommerce捆绑产品父属性及数量乘数?
解决WooCommerce捆绑产品订单项获取父产品属性与数量乘数的问题
首先假设你用的是WooCommerce官方的Product Bundles插件(这是最常用的捆绑产品解决方案),结合你的场景(每个捆绑仅为单一产品的多份组合),下面是具体的实现思路和代码示例:
核心逻辑拆解
你的需求本质是从捆绑订单项里,拆解出被捆绑的目标产品、该捆绑对应的固定份数(乘数),再结合用户购买的捆绑数量计算总份数。步骤如下:
- 识别当前订单项是否为捆绑产品类型
- 提取捆绑内的唯一子产品(也就是你说的「父产品」)
- 获取该捆绑的固定数量乘数(比如6件装里的6)
- 结合订单中捆绑的购买数量,计算总产品份数
- 从子产品对象中提取所需的属性信息
完整代码示例
foreach ( $order->get_items() as $item ) { // 第一步:判断当前订单项是否为捆绑产品 if ( $item->is_type('bundle') ) { // 获取捆绑产品的原始对象 $bundle_product = $item->get_product(); // 第二步:获取捆绑内的子产品列表(你的场景里只有一个子产品) $bundled_items = $bundle_product->get_bundled_items(); if ( ! empty( $bundled_items ) ) { // 取列表中的第一个子产品(因为你的捆绑是单一产品组合) $bundled_item = reset( $bundled_items ); // 第三步:获取被捆绑的父产品对象 $parent_product = $bundled_item->get_product(); // 第四步:获取捆绑的数量乘数(比如6件装里的6) $quantity_multiplier = $bundled_item->get_quantity(); // 获取用户购买该捆绑产品的数量 $bundle_purchase_qty = $item->get_quantity(); // 计算总数量:购买份数 × 捆绑乘数 $total_quantity = $bundle_purchase_qty * $quantity_multiplier; // ------------------------------ // 这里可以处理父产品的属性信息 // ------------------------------ if ( $parent_product->has_attributes() ) { $product_attributes = $parent_product->get_attributes(); foreach ( $product_attributes as $attr ) { // 获取属性名称和对应的属性值 $attr_label = wc_attribute_label( $attr->get_name() ); $attr_value = $parent_product->get_attribute( $attr->get_name() ); // 根据你的需求做后续处理,比如输出或存储 // echo "{$attr_label}: {$attr_value}<br>"; } } // 调试用的示例输出(可根据需求删除) // echo "父产品名称:{$parent_product->get_name()}<br>"; // echo "捆绑乘数:{$quantity_multiplier}<br>"; // echo "购买捆绑份数:{$bundle_purchase_qty}<br>"; // echo "总产品数量:{$total_quantity}<br>"; } } else { // 非捆绑产品的处理逻辑(如果需要的话) } }
关键方法说明
$item->is_type('bundle'):快速判断订单项是否为捆绑产品类型$bundle_product->get_bundled_items():获取捆绑产品内所有子产品的集合$bundled_item->get_product():获取子产品对应的原始产品对象(即你需要的「父产品」)$bundled_item->get_quantity():获取该子产品在捆绑中的固定份数(也就是乘数)$item->get_quantity():获取用户购买该捆绑产品的数量
注意事项
- 确保你已安装并激活WooCommerce Product Bundles插件,上述方法是该插件提供的官方标准方法
- 若你使用的是第三方捆绑插件,可通过
$item->get_meta_data()查看订单项的元数据,找到存储子产品ID和乘数的自定义字段,再做对应调整 $parent_product是标准的WC_Product对象,你可以用所有WooCommerce产品方法获取更多信息(比如变体属性、自定义字段等)
内容的提问来源于stack exchange,提问作者eComEvo
相关产品推荐
相关产品推荐

