Сохранение пользовательских данных корзины из динамически созданной корзины при создании заказа в Woocommerce

Важная заметка: Я не использую functions.php для каких-либо функций корзины. Я использую автономные файлы php, он должен оставаться таким.

В 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);

Но данные пользовательского элемента, которые я добавил не сохраняется в заказе.

Что я делаю неправильно?

1

Решение

Поскольку вы не хотите использовать какую-либо зацепку, вам будет необходимо установить данные пользовательского элемента корзины после создания заказа … Так что попробуйте следующее:

Попробуйте следующее:

$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();

Проверено и работает.

НОТА: global woocommerce теперь заменено WC() с тех пор.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector