Сохранение пользовательских данных корзины из динамически созданной корзины при создании заказа в Woocommerce - PullRequest
0 голосов
/ 19 декабря 2018

Важное примечание: Я не использую 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 Ответ

0 голосов
/ 19 декабря 2018

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

Попробуйте выполнить следующее:

$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() с некоторого времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...