在 Woocommerce 中创建订单时从动态创建的购物车中保存自定义购物车项目数据
Save custom cart item data from dynamic created cart on order creation in Woocommerce
Important note: I am not using functions.php for any cart functionality. I am using standalone php files, it has to stay this way.
在 Woocommerce 中,我创建了一个购物车,使用以下方法动态添加产品:
global $woocommerce;
$cart = $woocommerce->cart;
//set the custom item data
$item_data = array();
$product_id = '121';
$item_data = array(
'plain_data' => 'test data',
'array_data' => array('URL' => 'URL', 'Signals' => 'SIGNALS')
);
//Add it to the cart
$cart->add_to_cart($product_id, 1, null, null, $item_data);
然后我使用以下方法从购物车创建订单:
global $woocommerce;
$cart = $woocommerce->cart;
$order_data = array('payment_method' => 'PayPal');
$checkout = $woocommerce->checkout();
$order_id = $checkout->create_order($order_data);
但是我添加的自定义项目数据没有保存在订单中。
我做错了什么?
由于您不想使用任何挂钩,因此一旦创建订单,您将不得不在之后设置自定义购物车项目数据……因此请尝试以下操作:
尝试以下操作:
$product_id = '121';
$item_data = array(
'plain_data' => 'test data',
'array_data' => array('URL' => 'URL', 'Signals' => 'SIGNALS')
);
$item_data_keys = array_keys($item_data); // Get array keys
//Add it to the cart
WC()->cart->add_to_cart($product_id, 1, 0, array(), $item_data);
// Create order
$order_id = WC()->checkout->create_order( array('payment_method' => 'PayPal') );
// Get an instance of the WC_Order Object
$order = wc_get_order($order_id);
// Loop through order items
foreach( $order->get_items() as $item ){
// Loop though custom item data
foreach( $item_data_keys as $item_data_key ){
// set custom item data
$item->update_meta_data( $item_data_key, $item_data[$item_data_key] );
}
// Save item data
$item->save();
}
// Save order
$order->save();
已测试并有效。
NOTE: global woocommerce
is now replaced by WC()
since a while.
Important note: I am not using functions.php for any cart functionality. I am using standalone php files, it has to stay this way.
在 Woocommerce 中,我创建了一个购物车,使用以下方法动态添加产品:
global $woocommerce;
$cart = $woocommerce->cart;
//set the custom item data
$item_data = array();
$product_id = '121';
$item_data = array(
'plain_data' => 'test data',
'array_data' => array('URL' => 'URL', 'Signals' => 'SIGNALS')
);
//Add it to the cart
$cart->add_to_cart($product_id, 1, null, null, $item_data);
然后我使用以下方法从购物车创建订单:
global $woocommerce;
$cart = $woocommerce->cart;
$order_data = array('payment_method' => 'PayPal');
$checkout = $woocommerce->checkout();
$order_id = $checkout->create_order($order_data);
但是我添加的自定义项目数据没有保存在订单中。
我做错了什么?
由于您不想使用任何挂钩,因此一旦创建订单,您将不得不在之后设置自定义购物车项目数据……因此请尝试以下操作:
尝试以下操作:
$product_id = '121';
$item_data = array(
'plain_data' => 'test data',
'array_data' => array('URL' => 'URL', 'Signals' => 'SIGNALS')
);
$item_data_keys = array_keys($item_data); // Get array keys
//Add it to the cart
WC()->cart->add_to_cart($product_id, 1, 0, array(), $item_data);
// Create order
$order_id = WC()->checkout->create_order( array('payment_method' => 'PayPal') );
// Get an instance of the WC_Order Object
$order = wc_get_order($order_id);
// Loop through order items
foreach( $order->get_items() as $item ){
// Loop though custom item data
foreach( $item_data_keys as $item_data_key ){
// set custom item data
$item->update_meta_data( $item_data_key, $item_data[$item_data_key] );
}
// Save item data
$item->save();
}
// Save order
$order->save();
已测试并有效。
NOTE:
global woocommerce
is now replaced byWC()
since a while.