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

时间:2018-08-29 20:47:19

标签: 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', $values['custom_option'] );           
    }
}
add_action( 'woocommerce_add_order_item_meta', 'custom_order_item_meta', 10, 2 );

但是当我转储wc_get_order时,我的元数据不存在。

我正在使用;

woocommerce_add_order_item_meta() 保存数据但转储var_dump(wc_get_order( $order->id ));也不显示我的自定义元字段

我应该使用另一个挂钩来访问此数据吗?

1 个答案:

答案 0 :(得分:2)

您要查找的数据不是订单的元数据,而是订单的 item 元数据,并且位于wp_woocommerce_order_itemmeta数据库表中(请参见下面的访问方法)

从woocommerce 3开始,a much better hook替换了旧的woocommerce_add_order_item_meta钩子。

另外,meta_key最好是可读标签名称,因为该数据将显示在每个订单商品下

代码:

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'] );          
    }
}

在“收到订单”(谢谢)页面中,您将得到类似的内容:

enter image description here

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

  

要访问此订单商品数据,您需要在foreach循环中从订单对象获取商品:

foreach( $order->get_items() as $item_id => $item ){
    $custom_data = $item->get_meta( 'Custom option' );
}
     

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

$items       = $order->get_items(); // Order items
$item        = reset($items); // The first Order item
$custom_data = $item->get_meta( 'Custom option' ); // Your custom meta data

相关:Replace woocommerce_add_order_item_meta hook in Woocommerce 3.4