Reputation: 4227
I'm trying add order item meta and expect to see it in my {prefix}woocommerce_order_itemmeta table when user submit order.
I add my value with woocommerce_add_cart_item_data
filter:
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;
}
And this is works. When I var_dump my cart, there definitely my param exists.
But when user submit order, I can't find this param in my db.
What did I miss? How it can be stored in order item meta? And which is proper hook for this thing?
Upvotes: 3
Views: 10144
Reputation: 2432
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 );
Upvotes: -1
Reputation: 253784
You need to save this data in order item meta data:
// 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'] ) );
}
Code goes in function.php file of your active child theme (or theme) or also in any plugin file.
This code is tested and works.
So this will be displayed in Order item data on Order-received, my account Order view and in email notifications.
Upvotes: 4