Woocommerce Order再次无法复制自定义字段

时间:2014-08-27 12:50:48

标签: php wordpress woocommerce

我设法编写我的插件代码,为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;
}

2 个答案:

答案 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的值替换为缺少或未自动添加的自定义字段的键。