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

如何从WooCommerce订单项中获取ACF自定义字段comboitems的值?

WooCommerce获取订单商品自定义字段comboitems的解决方案

你遇到的问题主要有两个核心原因:一是the_field()是直接输出内容而非返回值,无法直接赋值给变量;二是没有指定正确的对象ID,导致无法定位到存储comboitems字段的位置。以下分两种场景给出解决方法:

场景1:comboitems是产品(Product)的自定义字段

如果这个字段是给商品本身添加的(比如通过ACF给产品类型添加的字段),需要先从订单商品项关联到对应的产品,再获取字段值:

function example_metadata( $metadata, $order, $post  ) {
  foreach ( $order->get_items() as $item_id => $item ) {
        $metadata['test'] = '1234';
        $metadata['field1'] = $item->get_data();
        
        // 获取订单商品对应的产品对象
        $product = $item->get_product();
        if ( $product ) {
            // 使用get_field获取产品的自定义字段,传入产品ID
            $metadata['customfield'] = get_field('comboitems', $product->get_id());
        }
  }
  return $metadata;
}

场景2:comboitems是订单商品项(Order Line Item)的自定义字段

如果这个字段是直接附加到订单中的商品项上的,用WooCommerce自带的元数据方法获取:

function example_metadata( $metadata, $order, $post  ) {
  foreach ( $order->get_items() as $item_id => $item ) {
        $metadata['test'] = '1234';
        $metadata['field1'] = $item->get_data();
        
        // 方法1:WooCommerce原生获取元数据
        $metadata['customfield'] = $item->get_meta('comboitems');
        
        // 方法2:如果是ACF添加到订单商品项的字段,用下面的写法
        // $metadata['customfield'] = get_field('comboitems', $item);
  }
  return $metadata;
}

关键提示

  • 必须用get_field()替代the_field():前者返回字段值可用于赋值,后者直接将内容输出到页面。
  • 若不确定字段存储位置,可以用$item->get_meta_data()查看订单商品项的所有元数据,或用get_post_meta($product->get_id())查看产品的所有元数据,确认字段名是否准确(ACF字段可能存储为带下划线的前缀,但get_field()会自动处理)。

内容的提问来源于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 23:42:26