如何从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
相关产品推荐
相关产品推荐

