Как получить информацию о товаре в заказе WooCommerce

4 мар. 2015 г., 00:14:52
Просмотры: 46.2K
Голосов: 7

Я пытаюсь получить все заказы WooCommerce и найти информацию о товарах в каждом заказе. Я видел много примеров здесь и в других местах в интернете, и все они, похоже, предлагают делать одно и то же, но это не работает. Я использую WordPress 4.1.1 и WooCommerce 2.3.3, вот мой код:

$filters = array(
    'post_status' => 'any',
    'post_type' => 'shop_order',
    'posts_per_page' => 200,
    'paged' => 1,
    'orderby' =>'modified',
    'order' => 'ASC'
);

$loop = new WP_Query( $filters );

while ( $loop->have_posts() ) {
    $loop->the_post();
    $order = new WC_Order($loop->post->ID);

    foreach ($order->get_items() as $key => $lineItem) {
        print_r($lineItem);
    }
}

Проблема в том, что когда я выполняю print_r($lineItem), там есть только три свойства, из которых только два когда-либо заполнены. Типичный результат print_r($lineItem) выглядит так:

Array ( 
    [name] => Полотенце Fouta – Жемчужно-серое и белое в полоску 
    [type] => line_item 
    [item_meta] => 
)

Как мне получить остальную информацию об этом элементе заказа, например идентификатор товара, является ли он единичным/вариативным товаром и т.д.

0
Все ответы на вопрос 1
2

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

$filters = array(
    'post_status' => 'any',
    'post_type' => 'shop_order',
    'posts_per_page' => 200,
    'paged' => 1,
    'orderby' => 'modified',
    'order' => 'ASC'
);

$loop = new WP_Query($filters);

while ($loop->have_posts()) {
    $loop->the_post();
    $order = new WC_Order($loop->post->ID);

    foreach ($order->get_items() as $key => $lineItem) {

        //раскомментируйте следующий код, чтобы увидеть полные данные
        //        echo '<pre>';
        //        print_r($lineItem);
        //        echo '</pre>';
        echo '<br>' . 'Название товара: ' . $lineItem['name'] . '<br>';
        echo 'ID товара: ' . $lineItem['product_id'] . '<br>';
        if ($lineItem['variation_id']) {
            echo 'Тип товара: Вариативный товар' . '<br>';
        } else {
            echo 'Тип товара: Простой товар' . '<br>';
        }
    }
}

И вот результат, который я получил:

Результат выполнения кода

Попробуйте этот код и сообщите, как он работает у вас.

26 июн. 2015 г. 07:53:46
Комментарии

это работает, но вызывает проблему, когда я пытаюсь использовать это внутри класса... и когда я обращаюсь к этому, получаю ошибку Uncaught Exception: Invalid order

User User
16 окт. 2018 г. 22:58:16

также $loop->the_post(); это обязательно?

User User
16 окт. 2018 г. 22:58:55