将自定义购物车项目值添加到 WooCommerce 订单项目元数据
Add a custom cart item value to WooCommerce order item meta data
我正在尝试添加订单项元数据,并希望在用户提交订单时在我的{prefix}woocommerce_order_itemmeta table 中看到它。
我用 woocommerce_add_cart_item_data
过滤器添加我的值:
add_filter( 'woocommerce_add_cart_item_data', 'aa_func_20170206100217', 10, 3 );
function aa_func_20170206100217( $cart_item_data, $product_id, $variation_id ) {
$data = $_POST;
if ( isset( $data[ 'selected_date_event' ] ) ) {
$selected_date_event = [
'selected_date_event' => $data[ 'selected_date_event' ]
];
return array_merge( $cart_item_data, $selected_date_event );
}
return $cart_item_data;
}
这是可行的。当我 var_dump 我的购物车时,我的参数肯定存在。
但是当用户提交订单时,我在我的数据库中找不到这个参数。
我错过了什么?它如何存储在订单项元中?哪个钩子适合这个东西?
您需要将此数据保存在订单项元数据中:
// ADD THE INFORMATION AS ORDER ITEM META DATA SO THAT IT CAN BE SEEN AS PART OF THE ORDER
add_action('woocommerce_add_order_item_meta','add_product_custom_field_to_order_item_meta', 9, 3 );
function add_product_custom_field_to_order_item_meta( $item_id, $item_values, $item_key ) {
// the meta-key is 'Date event' because it's going to be the label too
if( ! empty( $item_values['selected_date_event'] ) )
wc_update_order_item_meta( $item_id, 'Date event', sanitize_text_field( $item_values['selected_date_event'] ) );
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
此代码已经过测试并且有效。
So this will be displayed in Order item data on Order-received, my account Order view and in email notifications.
add_filter( 'woocommerce_add_cart_item_data', 'aa_func_20170206100217', 10, 3 );
function aa_func_20170206100217( $cart_item_data, $product_id, $variation_id ) {
$data = $_POST;
if ( isset( $data[ 'selected_date_event' ] ) ) {
$selected_date_event = [
'selected_date_event' => $data[ 'selected_date_event' ]
];
return array_merge( $cart_item_data, $selected_date_event );
}
return $cart_item_data;
}
add_filter( 'woocommerce_get_cart_item_from_session', function ( $cartItemData, $cartItemSessionData, $cartItemKey ) {
if ( isset( $cartItemSessionData['selected_date_event'] ) ) {
$cartItemData['selected_date_event'] = $cartItemSessionData['selected_date_event'];
}
return $cartItemData;
}, 10, 3 );
add_filter( 'woocommerce_get_item_data', function ( $data, $cartItem ) {
if ( isset( $cartItem['selected_date_event'] ) ) {
$data[] = array(
'name' => 'selected_date_event',
'value' => $cartItem['selected_date_event']
);
}
return $data;
}, 10, 2 );
add_action( 'woocommerce_add_order_item_meta', function ( $itemId, $values, $key ) {
if ( isset( $values['myCustomData'] ) ) {
wc_add_order_item_meta( $itemId, 'selected_date_event', $values['selected_date_event'] );
}
}, 10, 3 );
我正在尝试添加订单项元数据,并希望在用户提交订单时在我的{prefix}woocommerce_order_itemmeta table 中看到它。
我用 woocommerce_add_cart_item_data
过滤器添加我的值:
add_filter( 'woocommerce_add_cart_item_data', 'aa_func_20170206100217', 10, 3 );
function aa_func_20170206100217( $cart_item_data, $product_id, $variation_id ) {
$data = $_POST;
if ( isset( $data[ 'selected_date_event' ] ) ) {
$selected_date_event = [
'selected_date_event' => $data[ 'selected_date_event' ]
];
return array_merge( $cart_item_data, $selected_date_event );
}
return $cart_item_data;
}
这是可行的。当我 var_dump 我的购物车时,我的参数肯定存在。
但是当用户提交订单时,我在我的数据库中找不到这个参数。
我错过了什么?它如何存储在订单项元中?哪个钩子适合这个东西?
您需要将此数据保存在订单项元数据中:
// ADD THE INFORMATION AS ORDER ITEM META DATA SO THAT IT CAN BE SEEN AS PART OF THE ORDER
add_action('woocommerce_add_order_item_meta','add_product_custom_field_to_order_item_meta', 9, 3 );
function add_product_custom_field_to_order_item_meta( $item_id, $item_values, $item_key ) {
// the meta-key is 'Date event' because it's going to be the label too
if( ! empty( $item_values['selected_date_event'] ) )
wc_update_order_item_meta( $item_id, 'Date event', sanitize_text_field( $item_values['selected_date_event'] ) );
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
此代码已经过测试并且有效。
So this will be displayed in Order item data on Order-received, my account Order view and in email notifications.
add_filter( 'woocommerce_add_cart_item_data', 'aa_func_20170206100217', 10, 3 );
function aa_func_20170206100217( $cart_item_data, $product_id, $variation_id ) {
$data = $_POST;
if ( isset( $data[ 'selected_date_event' ] ) ) {
$selected_date_event = [
'selected_date_event' => $data[ 'selected_date_event' ]
];
return array_merge( $cart_item_data, $selected_date_event );
}
return $cart_item_data;
}
add_filter( 'woocommerce_get_cart_item_from_session', function ( $cartItemData, $cartItemSessionData, $cartItemKey ) {
if ( isset( $cartItemSessionData['selected_date_event'] ) ) {
$cartItemData['selected_date_event'] = $cartItemSessionData['selected_date_event'];
}
return $cartItemData;
}, 10, 3 );
add_filter( 'woocommerce_get_item_data', function ( $data, $cartItem ) {
if ( isset( $cartItem['selected_date_event'] ) ) {
$data[] = array(
'name' => 'selected_date_event',
'value' => $cartItem['selected_date_event']
);
}
return $data;
}, 10, 2 );
add_action( 'woocommerce_add_order_item_meta', function ( $itemId, $values, $key ) {
if ( isset( $values['myCustomData'] ) ) {
wc_add_order_item_meta( $itemId, 'selected_date_event', $values['selected_date_event'] );
}
}, 10, 3 );