WooCommerce:将自定义元添加为隐藏的订单项元以供内部使用

WooCommerce: Add custom meta as hidden order item meta for internal use

我想向 WooCommerce 中的订单项添加一些元数据。 这些元字段仅供内部使用,不应显示。

我们在产品中有一些额外的字段,例如额外费用。我想在导出订单后使用这笔费用。

我在这里找到了一个很好的答案:

add_action('woocommerce_checkout_create_order_line_item', 'add_custom_hiden_order_item_meta_data', 20, 4 );
function add_custom_hiden_order_item_meta_data( $item, $cart_item_key, $values, $order ) {

    // Set user meta custom field as order item meta
    if( $meta_value = get_user_meta( $order->get_user_id(), 'billing_enumber', true ) )
        $item->update_meta_data( 'pa_billing-e-number', $meta_value );
}

但是在这个例子中,元字段的内容将出现在客户的订单详细信息中。

有没有办法让这些字段只在后端可见并可用于内部功能?

已更新

将任何元值设置为仅在管理订单编辑页面上可见的隐藏订单项元数据的简单方法是在元键的开头添加下划线,例如:

add_action('woocommerce_checkout_create_order_line_item', 'add_custom_hiden_order_item_meta_data', 20, 4 );
function add_custom_hiden_order_item_meta_data( $item, $cart_item_key, $values, $order ) {

    // Set user 'billing_enumber' custom field as admin order item meta (hidden from customer)
    if( $meta_value = get_user_meta( $order->get_user_id(), 'billing_enumber', true ) )
        $item->update_meta_data( '_billing_enumber', $meta_value );
}

然后要在管理员订单项上为该元键设置一个干净的标签名称,您可以使用:

add_filter('woocommerce_order_item_display_meta_key', 'filter_wc_order_item_display_meta_key', 20, 3 );
function filter_wc_order_item_display_meta_key( $display_key, $meta, $item ) {

    // Set user meta custom field as order item meta
    if( $meta->key === '_billing_enumber' && is_admin() )
        $display_key = __("Billing E Number", "woocommerce" );

    return $display_key;    
}

此代码位于您的活动子主题(或主题)的 function.php 文件中。已测试并有效。