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

如何从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 );

代码说明:

  1. 通过 $item->get_product() 直接从订单商品项获取对应的产品对象,这是获取关联产品最可靠的方式
  2. 增加产品对象有效性检查,避免因虚拟商品、已删除产品等场景触发报错
  3. 用商品项ID拼接元数据键名,防止多个商品的属性值互相覆盖
  4. 仅当属性值不为空时才添加到元数据,减少无效冗余数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:54:54