Получите метаданные элемента индивидуального заказа в Woocommerce 3

Я использую последнюю версию Woocommerce 3.4.2. Как я могу получить метаданные элемента заказа и присвоить им индивидуальное значение?

  1. Получаю метаданные с общим массивом $item_product_data_array.
  2. Мне нужно получить определенное значение - (Дополнительная модификация продукта). И назначить кастомный артикул.

Пример: У меня есть кофе - артикул 1001, в массиве - ключ [0] Продукт кофе имеет дополнительную модификацию - сахар (метаданные) Нужно найти "Сахар" и присвоить ему индивидуальный артикул - 50005.

[label] => Optionally select [value] => Array ( [0] => Cinnamon [1] => Sugar [2] => Mint )

То есть эта добавка должна быть в одном цикле как по цене, так и по количеству. Все они должны относиться к своему продукту со значением [0].

    // Get product details
        $items = $order->get_items();

        $sku = array();
        $product_kol = array();
        $product_price = array();
        $item_product_meta_data_array = array();

        foreach( $items as $key => $item){
            $product_kol[] = $item['qty'];
            $product_price[] = $item['line_total'];

            $item_id = $item['product_id'];
            $product = wc_get_product($item_id);
            $sku[] = $product->get_sku();

            $items_meta_data[]  = $item->get_meta_data();          
            $meta_data1 = $item->get_meta('Sugar');
                if ( ! empty( $meta_data1 ) ) {
                $skus[] = "50005";
                $item_quantities[] = "1";
            }
        }

        // Product details for sending as one line to an external service
        foreach ($sku as $key => $value){
            $data .= "&product[".$key."] = ".$value."";
            $data .= "&product_kol[".$key."] = ".$product_kol[$key]."";
            $data .= "&product_price[".$key."] = ".$product_price[$key]."";
            if (isset($product_mod[$key])) {
                $data .= "&product_mod[".$key."] = ".$product_mod[$key]."";
            }
        }

Думаю, это будет полезно, так как все модули дополнительных опций к продукту добавляют все значения в метаданные. И их сложно вытащить и включить в нужный цикл.

Итак, у нас должно получиться:

//products sku 
$product[0] = "10000";  // Coffe
$product[1] = "10001";  // Juice - second product for axample
$product[2] = "50005";  // Sugar

//products quantity
$product_kol[0] = "1"; // Аmount of coffee
$product_kol[1] = "1"; // Аmount of juice
$product_kol[2] = "1"; // Аmount of sugar

//Modifiers if they exist
$product_mod[2] = "0";  //The product with key 2 is the product modifier with key 0

@LoicTheAztec Последняя версия. Блок «// Информация о товаре» работает нормально.

Александра Кузнецова 12.06.2018 03:01

Спасибо! Помогите, пожалуйста, с доработкой товаров и присвоением артикула. Дополнительная модификация для товара всегда имеет количество = 1.

Александра Кузнецова 12.06.2018 03:43

Ребята, подскажите, какие действия нужно предпринять? И код попробую написать сам. На данный момент я не знаю, с чего начать.

Александра Кузнецова 13.06.2018 04:53

Если я нахожу правильный ингредиент в общем цикле -> я даю ему значение "50005" -> я даю $ item_quantities [] = 1

Александра Кузнецова 13.06.2018 04:59
Стоит ли изучать 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 и хотите разрабатывать...
2
4
6 192
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обновлено: Ваш код действительно устарел, так как Woocommerce версии 3… См.:

Итак, ваш код должен быть:

$skus = $item_quantities = $line_item_totals = $items_meta_data = array();

// Loop though order items
foreach( $order->get_items() as $item_id => $item){
    $product_id = $item->get_product_id();
    $product = $item->get_product();

    $item_quantities[] = $item->get_quantity();
    $line_item_totals[] = $item->get_total();
    $skus[]            = $product->get_sku();
    $items_meta_data[]  = $item->get_meta_data();
}

// Product details for sending as one line to an external service
foreach ($skus as $key => $value){
    $data .= "&product[".$key."] = ".$value."";
    $data .= "& product_kol[".$key."] = ".$item_quantities[$key]."";
    $data .= "& product_price[".$key."] = ".$line_item_totals[$key]."";
    if ( isset($product_mod[$key]) ) {
        $data .= "&product_mod[".$key."] = ".$product_mod[$key]."";
    }
}

Он должен работать лучше… но $product_mod не определен и $item->get_meta_data() не используется.


Теперь Чтобы получить специальные метаданные, если ваш пользовательский мета-ключ - Custom thing, вы будете использовать:

 $custom_thing = $item->get_meta('Custom thing');

Это должно быть включено в цикл foreach элементов заказа… Протестировано и работает.


Еще кое-что:

  • Чтобы получить общую сумму позиции заказа без скидки: $item->get_subtotal();
  • Чтобы получить общую сумму позиции заказа со скидкой: $item->get_total();
  • Чтобы узнать цену товара (шт.): $product->get-price();

Подскажите пожалуйста, в данном случае _custom_thing - $ custom_thing = $ product-> get_meta ('_Sugar') ;? Теоретически мне нужно найти все добавки в метаданных и дать им свой sku. По умолчанию их количество будет равно 1.

Александра Кузнецова 12.06.2018 04:10

Спасибо! Единственное, к сожалению, непонятно, как достичь желаемой задачи. Может я написал немного непонятно, чего пытался добиться ... Часть $product_mod.

Александра Кузнецова 12.06.2018 04:20

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