Woocommerce - 获取订单商品的价格和数量。

新手上路,请多包涵

使用 Woocommerce 2.6.8 ,我无法获得 文档 中描述的 Order Item Data 信息以及 此处的 SO

我想要的只是获取行项目价格和数量,这应该很简单:

 $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 循环的粗略破解,直到找到我正在寻找的密钥。

我觉得我必须在这里遗漏一些明显的东西。

原文由 robobobobo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

更新 (对于 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 ) {

    // Get an instance of corresponding the WC_Product object
    $product        = $item->get_product();

    $active_price   = $product->get_price(); // The product active raw price

    $regular_price  = $product->get_sale_price(); // The product raw sale price

    $sale_price     = $product->get_regular_price(); // The product raw regular price

    $product_name   = $item->get_name(); // Get the item name (product name)

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

    $item_subtotal  = $item->get_subtotal(); // Get the item line total non discounted

    $item_subto_tax = $item->get_subtotal_tax(); // Get the item line total tax non discounted

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

    $item_total_tax = $item->get_total_tax(); // Get the item line total  tax discounted

    $item_taxes     = $item->get_taxes(); // Get the item taxes array

    $item_tax_class = $item->get_tax_class(); // Get the item tax class

    $item_tax_status= $item->get_tax_status(); // Get the item tax status

    $item_downloads = $item->get_item_downloads(); // Get the item downloads

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

更新: 还有以下所有 WC_Abstract_Order 方法 允许使用各种有趣的选项获取订单项目数据,例如:

 // 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) {
     ## Option: Including or excluding Taxes
     $inc_tax = true;

     ## Option: Round at item level (or not)
     $round   = false; // Not rounded at item level ("true"  for rounding at item level)

     $item_cost_excl_disc = $order->get_item_subtotal( $item, $inc_tax, $round ); // Calculate item cost (not discounted) - useful for gateways.

     $item_cost_incl_disc = $order->get_item_total( $item, $inc_tax, $round ); // Calculate item cost (discounted) - useful for gateways.

     $item_tax_cost       = $order->get_item_tax( $item, $inc_tax, $round ); // Get item tax cost - useful for gateways.

      $item_Line_subtotal = $order->get_line_subtotal( $item, $inc_tax, $round ); // Get line subtotal - not discounted.

     $item_Line_total     = $order->get_line_total( $item, $inc_tax, $round ); // Get line total - discounted

     $item_Line_tax       = $order->get_line_tax( $item ); // Get line tax

     $form_line_subtotal  = $order->get_formatted_line_subtotal( $item, $tax_display = '' ) // Gets line subtotal - formatted for display.
}

感谢@Casper 的评论


此外 WC_Data 方法 可用于将订单项目数据作为不受保护的数组获取或从特定元键获取特定的嵌套或自定义元数据值:

 // 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 ) {
    $order_item_data      = $item->get_data(); // Get WooCommerce order item meta data in an unprotected array
    print_r( $order_item_data ); // display raw data

    $item_meta_data = $item->get_meta_data(); // Get order item nested and custom meta data in an unprotected array
    print_r( $item_meta_data ); // display raw data

    $item_value     = $item->get_meta('meta_key'); // Get specific order item custom or nested meta data value from a meta_key
    print_r( $item_value ); // display raw data (can be a string or an array)
}

此代码经过测试并且可以工作。

方法 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()`**](https://docs.woocommerce.com/wc-apidocs/class-WC_Abstract_Order.html#_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) { // Get the product name \(product_name = \)item[‘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 方法

原文由 LoicTheAztec 发布,翻译遵循 CC BY-SA 4.0 许可协议

请参阅此文档以了解订单类中的 woocommerce 订单项。 这里

您可以调用 total 以获取总订单成本。如果你想通过取 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);

这得到今天的产品价格,而不是下订单时的价格。因此,如果以单价 10 下订单,然后更改单价,您将获得新价格。该订单仍然具有旧的“原始”订单价格..

原文由 Hemel 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题