2016-11-21 6 views
8

Использование Woocommerce 2.6.8, я не могу получить информацию о позиции заказа, как описано в docs и here on SO.Woocommerce - Получение цены и количества товара.

Все, что я хочу, чтобы получить цену Line Item и количество, которое должно быть простым:

$order = new WC_Order($order_id); 
$order_items = $order->get_items(); 
foreach ($order_items as $items_key => $items_value) { 
      echo $items_value['name']; //this works 
      echo $items_value['qty']; //this doesn't work 
      echo $items_value[item_meta][_qty][0]; //also doesn't work 
      echo $items_value['line_total']; //this doesn't work 
    } 

Приглядевшись на то, что получает возвращаемые вернулся

Array 
(
[1] => Array 
    (
     [name] => Sample Product 1 
     [type] => line_item 
     [item_meta] => 
     [item_meta_array] => Array 
      (
       [1] => stdClass Object 
        (
         [key] => _qty 
         [value] => 1 
        ) 

       [2] => stdClass Object 
        (
         [key] => _tax_class 
         [value] => 
        ) 

       [3] => stdClass Object 
        (
         [key] => _product_id 
         [value] => 8 
        ) 

       [4] => stdClass Object 
        (
         [key] => _variation_id 
         [value] => 0 
        ) 

       [5] => stdClass Object 
        (
         [key] => _line_subtotal 
         [value] => 50 
        ) 

       [6] => stdClass Object 
        (
         [key] => _line_total 
         [value] => 50 
        ) 

       [7] => stdClass Object 
        (
         [key] => _line_subtotal_tax 
         [value] => 0 
        ) 

       [8] => stdClass Object 
        (
         [key] => _line_tax 
         [value] => 0 
        ) 

       [9] => stdClass Object 
        (
         [key] => _line_tax_data 
         [value] => a:2:{s:5:"total";a:0:{}s:8:"subtotal";a:0:{}} 
        ) 

      ) 

    ) 

) 

Это все с использованием документированных Методы Woocommerce, почему информация, которую мне нужно сохранить в этом item_meta_array?

Кто-нибудь знает, как я могу получить эту информацию?

Предпочтительно использовать документированные методы, в отличие от необоснованного взлома петли через item_meta_array, пока не найду ключ, который я ищу.

Я чувствую, что, должно быть, мне не хватает чего-то очевидного.

ответ

16

Update (для WooCommerce 3+)

Теперь код можно использовать WC_Order_Item_ProductWC_Product) методы вместо этого, как:

## For WooCommerce 3+ ## 

// Getting an instance of the WC_Order object from a defined ORDER ID 
$order = wc_get_order($order_id); 

// Iterating through each "line" items in the order 
foreach ($order->get_items() as $item_id => $item_data) { 

    // Get an instance of corresponding the WC_Product object 
    $product = $item_data->get_product(); 
    $product_name = $product->get_name(); // Get the product name 

    $item_quantity = $item_data->get_quantity(); // Get the item quantity 

    $item_total = $item_data->get_total(); // Get the item line total 

    // Displaying this data (to check) 
    echo 'Product name: '.$product_name.' | Quantity: '.$item_quantity.' | Item total: '. number_format($item_total, 2); 
} 

Этот код проверен и работает.

Метод get_item_meta() устарела и была заменена wc_get_order_item_meta, и это больше не метод , а функция с некоторыми параметрами:

/** Parameters summary 
* @param mixed $item_id 
* @param mixed $key 
* @param bool $single (default: true) 
* @return mixed 
*/ 

wc_get_order_item_meta($item_id, $key, $single = true); 

Предыдущие версии WooCommerce (от 2,4 до 2.6.x)

Вы можете использовать метод WC_Abstract_order get_item_meta(), чтобы получить метаданные заказа (количество предметов и общее количество товаров).

Так что ваш код будет:

// Getting the order object "$order" 
$order = wc_get_order($order_id); 
// Getting the items in the order 
$order_items = $order->get_items(); 
// Iterating through each item in the order 
foreach ($order_items as $item_id => $item_data) { 
    // Get the product name 
    $product_name = $item_data['name']; 
    // Get the item quantity 
    $item_quantity = $order->get_item_meta($item_id, '_qty', true); 
    // Get the item line total 
    $item_total = $order->get_item_meta($item_id, '_line_total', true); 

    // Displaying this data (to check) 
    echo 'Product name: '.$product_name.' | Quantity: '.$item_quantity.' | Item total: '. $item_total; 
} 

Этот код проверен и полностью работоспособен.

Ссылка: Class WC_Abstract_Order Methods

+0

Это прекрасно работает, также оказывается большая часть моего оригинального кода правильно работал тоже. Проблема заключалась в том, что я вызывал эти методы до полной загрузки woocommerce, поэтому правильная информация не возвращалась! Ваш код помог мне понять, что что-то еще не совсем правильное, наконец, он решил сейчас, спасибо! – robobobobo

+0

get_item_meta устарел с WC 3.0, вместо этого следует использовать wc_get_order_item_meta – Tofandel

+1

@Tofandel ... Как вы можете видеть, этот ответ был горничным перед WC 3. Поэтому я делаю обновление, затем ... спасибо. – LoicTheAztec

1

Пожалуйста, ознакомьтесь с этой документацией для статьи в категории «Занятость» в классе заказа. Here

Вы можете позвонить в общую сумму, чтобы получить полную стоимость заказа. Если вы хотите, чтобы получить единую стоимость пункта, принимая PRODUCT_ID

$_product = wc_get_product($product_id); 
$Price = $_product->get_price(); 

Или вы можете сделать это.

$price = get_post_meta(get_the_ID(), '_regular_price', true); 
$price = get_post_meta(get_the_ID(), '_sale_price', true); 
1

цена товара может получить от order объекта, используя код

$order->get_item_total($item); 

 Смежные вопросы

  • Нет связанных вопросов^_^