Woocommerce — получение цены и количества товара заказа.

Используя Woocommerce 2.6.8, я не могу получить информацию об элементах заказа, как описано в документы а также здесь на ТАК.

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

$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 пока я не найду ключ, который ищу.

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

14

Решение

Обновить (Для WooCommerce 3+)

Теперь для кода вы можете использовать WC_Order_Item_Product (а также WC_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)

Ты можешь использовать get_item_meta() Метод WC_Abstract_order, чтобы получить метаданные заказа (количество товара и итоговая цена товара).

Итак, ваш код будет:

// 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;
}

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

Ссылка: Класс WC_Abstract_Order Методы

35

Другие решения

Цена товара может быть получена от order объект по приведенному ниже коду

$order->get_item_total( $item );
3

Пожалуйста, смотрите эту документацию для позиции WooCommerce в классе заказа.
Вот

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

$_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
По вопросам рекламы [email protected]