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

Important note: I am not using functions.php for any cart functionality. I am using standalone php files, it has to stay this way.

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
593
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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();

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

NOTE:global woocommerce is now replaced by WC() since a while.

Отличный ответ, спасибо! Но как насчет того, чтобы каждый товар в тележке имел уникальные данные? Разве это не применит один и тот же массив к каждому элементу заказа? Еще раз спасибо!

TMO 19.12.2018 16:27

Я понял. Большое спасибо!

TMO 19.12.2018 18:20

Другие вопросы по теме