首页 文章

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

提问于
浏览
2

我有一个自定义元数据到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 回答

  • 2

    您要查找的数据不是订单元数据,而是订购 item 元数据,位于 wp_woocommerce_order_itemmeta 数据库表中(请参阅下文如何访问此数据) .

    自从woocommerce 3,a much better hook取代旧的 woocommerce_add_order_item_meta 钩子 .

    另外 meta_key 最好是 a readable label name ,因为这个数据将是 displayed under each order item .

    代码:

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

    在“订单收到”(thankyou)页面中,您将获得如下内容:

    enter image description here

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

    要访问此订单商品数据,您需要在foreach循环中从订单对象获取商品:foreach($ order-> get_items()as $ item_id => $ item){
    $ custom_data = $ item-> get_meta('自定义选项');
    }
    要获得第一个订单项(避免使用foreach循环),您将使用:$ items = $ order-> get_items(); //订购商品
    $ item = reset($ items); //第一个Order项
    $ custom_data = $ item-> get_meta('自定义选项'); //您的自定义元数据


    相关:Replace woocommerce_add_order_item_meta hook in Woocommerce 3.4

相关问题