【问题标题】:Custom meta data added to Woocommerce not displayed in order item meta添加到 Woocommerce 的自定义元数据未显示在订单项元中
【发布时间】:2018-08-29 20:47:18
【问题描述】:

我有一个 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 )); 也不会显示我的自定义元字段

我应该使用另一个钩子来访问这些数据吗?

【问题讨论】:

    标签: php wordpress woocommerce hook-woocommerce orders


    【解决方案1】:

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

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

    显示且可读的订单商品元数据:

    要使自定义订单商品元数据显示在任何地方,元键应该是可读的标签名称并且不以下划线开头,因为此数据将是显示在每个订单项下

    代码:

    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( $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

    【讨论】:

    • 非常感谢 - 是否有不使用 foreach 语句来访问第一项的速记。例如。如果使用相同的字段集购买了其他几个项目,将始终使用第一个项目自定义字段。例如。 $order->get_items()[1]->get_meta( 'Custom option' )
    • @SamXronn 在我的答案中添加了一个附加项,以获得第一个订单项。
    猜你喜欢
    • 2021-06-01
    • 2018-07-12
    • 2021-06-10
    • 2021-07-13
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2020-11-11
    相关资源
    最近更新 更多