我想在WooCommerce中向订单项添加一些元数据。这些元字段仅供内部使用,不应显示。
我们在产品中有一些额外的字段,例如额外的费用。我想在以后导出订单后再使用这笔费用。
我在这里找到了一个很好的答案:https://stackoverflow.com/a/41988701/1788961
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 );
}
但是在此示例中,来自meta字段的内容将出现在客户的订单详细信息中。
是否有办法使这些字段仅在后端可见并且可用于内部功能?
更新
将任何元值设置为仅在管理员订单编辑页面上可见的隐藏订单项元数据的简单方法是在元键的开头添加下划线,例如:
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;
}
此代码进入您的活动子主题(或cative主题)的function.php文件。经过测试和工作。