web-dev-qa-db-ja.com

Woocommerce-注文アイテムの価格と数量を取得します。

Woocommerce 2.6.8を使用すると、 docs および ここでは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をループする粗雑なハックとは対照的に、文書化された方法を使用してください。

ここで明らかな何かを見逃しているように感じます。

17
robobobobo

更新(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メソッド

46
LoicTheAztec

アイテムの価格は、以下のコードでorderオブジェクトから取得できます

$order->get_item_total( $item );
3
Nishad Up

注文クラスの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);
1
Hemel