Php 添加到订单项元数据中的自定义元数据未显示在订单项元数据中

Php 添加到订单项元数据中的自定义元数据未显示在订单项元数据中,php,wordpress,woocommerce,hook-woocommerce,orders,Php,Wordpress,Woocommerce,Hook Woocommerce,Orders,我有一个自定义元数据到WooCommerce订单,现在我想在结帐后在感谢页面上显示它,但是,数据不可用。数据已保存并在管理员中可用,我似乎无法访问它 function custom_order_item_meta( $item_id, $values ) { if ( ! empty( $values['custom_option'] ) ) { woocommerce_add_order_item_meta( $item_id, 'custom_option', $v

我有一个自定义元数据到WooCommerce订单,现在我想在结帐后在感谢页面上显示它,但是,数据不可用。数据已保存并在管理员中可用,我似乎无法访问它

function custom_order_item_meta( $item_id, $values ) {

    if ( ! empty( $values['custom_option'] ) ) {
        woocommerce_add_order_item_meta( $item_id, 'custom_option', $values['custom_option'] );           
    }
}
add_action( 'woocommerce_add_order_item_meta', 'custom_order_item_meta', 10, 2 );
但是当我把
wc\u get\u order
倒出来时,我的元数据不在那里

我正在使用

woocommerce\u add\u order\u item\u meta()
保存数据但转储
var_dump(wc_get_order($order->id))也不显示我的自定义元字段


是否应该使用另一个钩子来访问此数据?

您要查找的数据不是order元数据,而是orderitem元数据,位于
wp\u woocommerce\u order\u itemmeta
数据库表中(请参见下文如何访问此数据)

从woocommerce 3开始,替换旧的
woocommerce\u add\u order\u item\u meta
hook

显示和可读的订单项目元数据:

要使自定义订单项目元数据到处显示,元数据键应为可读的标签名称,且不以下划线开头,因为此数据将显示在每个订单项目下

守则:

add_action( 'woocommerce_checkout_create_order_line_item', 'custom_order_item_meta', 20, 4 );
function custom_order_item_meta( $item, $cart_item_key, $values, $order ) {
    if ( isset( $values['custom_option'] ) ) {
        $item->update_meta_data( __('Custom option', 'woocommerce'), $values['custom_option'] );          
    }
}
在“订单已收到”(谢谢)页面中,您将看到如下内容:

这也将显示在后端和电子邮件通知中

要访问此订单项目数据您需要从foreach循环中的订单对象获取项目:

要获取第一个订单项(避免foreach循环),您将使用:



相关:

非常感谢-是否有一种不用
foreach
语句即可访问第一项的速记方法。例如,如果始终使用“第一个项目”自定义字段,则无论是否使用同一字段集购买了多个其他项目。例如,
$order->get_items()[1]->get_meta('Custom option')
@SamXronn在我的答案中添加了一个附加项,以获取第一个订单项。
foreach( $order->get_items() as $item_id => $item ){
    $custom_data = $item->get_meta( 'Custom option' );
}
$items       = $order->get_items(); // Order items
$item        = reset($items); // The first Order item
$custom_data = $item->get_meta( 'Custom option' ); // Your custom meta data