1 回答
TA贡献1906条经验 获得超3个赞
您没有将所有必需的购物车商品数据保存为自定义订单商品元数据,因此当使用“再次订购”时,某些自定义购物车商品数据丢失,并且您的价格计算不会应用。
自 WooCommerce 3 起,woocommerce_add_order_item_meta
hook也被弃用。
注意:使用您提供的代码,我无法更改购物车页面中的百分比,因此可能缺少某些内容。
您需要在代码中删除/替换以下函数:
// Add order item meta.
add_action('woocommerce_add_order_item_meta', 'add_order_item_meta', 10, 3);
function add_order_item_meta($item_id, $cart_item, $cart_item_key)
{
if (isset($cart_item['percentage'])) {
wc_add_order_item_meta($item_id, 'percentage', $cart_item['percentage']);
}
}
还有这个:
add_filter( 'woocommerce_order_again_cart_item_data', 'order_again_custom', 10, 3 );
function order_again_custom($cart_item_meta, $product, $order){
//Create an array of all the missing custom field keys that needs to be added in cart item.
$customfields = [
'Titulo1',
'percentage',
'custom_price',
'price',
'new_price',
];
global $woocommerce;
remove_all_filters( 'woocommerce_add_to_cart_validation' );
if ( ! array_key_exists( 'item_meta', $cart_item_meta ) || ! is_array( $cart_item_meta['item_meta'] ) )
foreach ( $customfields as $key ){
if(!empty($product[$key])){
$cart_item_meta[$key] = $product[$key];
}
}
return $cart_item_meta;
}
由以下人员组成:
// Save custom cart item data as custom order item meta data
add_action( 'woocommerce_checkout_create_order_line_item', 'add_order_item_meta', 10, 4 );
function add_order_item_meta( $item, $cart_item_key, $values, $order ) {
// Save and display the "Percentage" (optional - if needed)
if (isset($values['percentage'])) {
$item->update_meta_data( 'Percentage', $values['percentage'] );
}
// Save All custom cart item data as a hidden data array (important)
if (isset($values['percentage']) && isset($values['base_price']) && isset($values['new_price']) ) {
$custom_data = array(
'percentage' => $values['percentage'],
'base_price' => $values['base_price'],
'new_price' => $values['new_price'],
);
$item->update_meta_data( '_custom_data', $custom_data ); // save
}
}
// Add custom order item meta as custom cart item meta
add_filter( 'woocommerce_order_again_cart_item_data', 'custom_cart_item_data_for_order_again', 10, 3 );
function custom_cart_item_data_for_order_again( $cart_item_meta, $item, $order ) {
// Get the hidden order item data
$custom_data = (array) $item->get_meta( '_custom_data' );
if( ! empty($custom_data) ) {
$cart_item_meta = array_merge( $cart_item_meta, $custom_data );
}
return $cart_item_meta;
}
代码位于活动子主题(或活动主题)的 function.php 文件中。经过测试并有效。
- 1 回答
- 0 关注
- 143 浏览
添加回答
举报