如何从WooCommerce订单项中获取产品属性值?
解决WooCommerce订单JSON中添加产品属性的问题
你当前的代码存在几个关键问题,导致无法获取产品属性:
$item->get_product_id()返回的是产品的数字ID,不是产品对象,不能直接调用get_attribute()方法wc_get_product()没有传入产品ID参数,无法获取对应订单商品的产品对象$item_id是订单商品项的ID,不是产品对象,同样不能调用get_attribute()
以下是修正后的代码,可实现将订单中每个商品的指定属性添加到订单元数据中:
function example_metadata( $metadata, $order, $post ) { // 遍历订单中的所有商品项 foreach ( $order->get_items() as $item_id => $item ) { // 通过订单商品项获取对应的产品对象 $product = $item->get_product(); // 检查产品对象是否有效,避免报错 if ( $product ) { // 获取指定属性"split"的值 $split_attribute = $product->get_attribute( 'split' ); // 将属性值添加到元数据中,用商品项ID作为键的一部分避免覆盖 if ( ! empty( $split_attribute ) ) { $metadata['product_' . $item_id . '_split'] = $split_attribute; } } } return $metadata; } // 绑定到订单元数据获取的钩子,确保代码生效 add_filter( 'woocommerce_order_get_metadata', 'example_metadata', 10, 3 );
代码说明:
- 通过
$item->get_product()直接从订单商品项获取对应的产品对象,这是获取关联产品最可靠的方式 - 增加产品对象有效性检查,避免因虚拟商品、已删除产品等场景触发报错
- 用商品项ID拼接元数据键名,防止多个商品的属性值互相覆盖
- 仅当属性值不为空时才添加到元数据,减少无效冗余数据
内容的提问来源于stack exchange,提问作者teclesoft
相关产品推荐
相关产品推荐

