将自定义购物车项目值添加到WooCommerce订单商品元数据

时间:2017-09-07 09:01:39

标签: php wordpress woocommerce hook-woocommerce orders

我正在尝试添加订单商品元素,并希望在用户提交订单时在我的{prefix} woocommerce_order_itemmeta表中看到它。

我使用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我的购物车时,肯定存在我的参数。

enter image description here

但是当用户提交订单时,我无法在我的数据库中找到此参数。

我错过了什么?如何将它存储在订单商品元素中?这个东西适合哪个?

2 个答案:

答案 0 :(得分:0)

您需要在订单商品元数据中保存此数据:

{{1}}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

此代码经过测试并有效。

  

因此,这将显示在订单收到的订单商品数据,我的帐户订单视图和电子邮件通知中。

答案 1 :(得分:-1)

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