我设法编写我的插件代码,为woocommerce产品添加额外的自定义字段。这从购物车到完成订单一直工作。转到我的帐户并查看过去的订单,自定义字段会正确显示。
但是,当我选择在过去的订单上点击“再次订购”时,新购物车不包含自定义字段及其值。
以下是我目前要尝试的内容:
// order again
add_filter( 'woocommerce_order_again_cart_item_data', 'woocommerce_order_again_cart_item_data', 10, 3 );
function woocommerce_order_again_cart_item_data($cart_item_meta, $product, $order){
global $woocommerce;
// Disable validation
remove_filter( 'woocommerce_add_to_cart_validation', array( $this, 'validate_add_cart_item' ), 10, 3 );
if ( ! array_key_exists( 'item_meta', $cart_item_meta ) || ! is_array( $cart_item_meta['item_meta'] ) )
$cart_item_meta['item_meta'] = array();
foreach ( array( 'jhpc_toppings', 'jhpc_sauce', 'jhpc_toppings_half', 'jhpc_sauce_half', 'jhpc_garnish' ) as $key )
$cart_item_meta['item_meta'][$key] = $product['item_meta'][$key];
return $cart_item_meta;
}
答案 0 :(得分:0)
替换
$cart_item_meta['item_meta'][$key] = $product['item_meta'][$key];
通过
$cart_item_meta[$key] = $product[$key];
否则,为什么要删除验证?
答案 1 :(得分:0)
以下是再次为订单添加所有自定义字段数据的代码。在主题的function.php文件中使用给定的代码,并用您的密钥替换$ customfields数组的自定义字段键。
<?php
add_filter( 'woocommerce_order_again_cart_item_data', 'wpso2523951_order_again_cart_item_data', 10, 3 );
function wpso2523951_order_again_cart_item_data($cart_item_meta, $product, $order){
//Create an array of all the missing custom field keys that needs to be added in cart item.
$customfields = [
'customfield_key1',
'customfield_key2',
'customfield_key3',
'customfield_key4',
];
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;
}
?>
将数组$ customfields的值替换为缺少或未自动添加的自定义字段的键。