Add a custom cart item value to WooCommerce order item meta data

久未见 提交于 2019-12-08 02:20:05

问题


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?


回答1:


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.




回答2:


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 );


来源:https://stackoverflow.com/questions/46092156/add-a-custom-cart-item-value-to-woocommerce-order-item-meta-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!