2014-08-27 2 views
3

Мне удалось закодировать мой плагин, чтобы добавить дополнительные пользовательские поля в продукты woocommerce. Это работает от корзины до завершения заказа. Переходя к моей учетной записи и просматривая прошлые заказы, пользовательские поля отображаются правильно.Woocommerce Order Again не копирует пользовательские поля

Однако, когда я решил нажать «заказать еще раз» в прошлом заказе, новая корзина не содержит настраиваемых полей и их значений.

Вот что я в настоящее время, чтобы попытаться это:

// 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

заменить

$cart_item_meta['item_meta'][$key] = $product['item_meta'][$key]; 

по

$cart_item_meta[$key] = $product[$key]; 

В противном случае, почему вы удаляете проверку?

0

Введите код, который вы хотите добавить ко всем настраиваемым данным поля. Используйте данный код в файле functions.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 с ключами пользовательских полей, которые отсутствуют или не добавляются автоматически.

Смежные вопросы