web-dev-qa-db-ja.com

WooCommerce 3で注文アイテムとWC_Order_Item_Productを取得する

OK、WooCommerce 3.0+の変更点を確認すると、このクラスに直接アクセスできなくなっているようです。エラーを吐き出しているため、このコードを変更する必要があると思います。

$order_item_id = 15;
$order_item = new WC_Order_Item_Product($order_item_id);
$return = $order_item->get_id() ? $order_item : false;

しかし、恥ずかしいことに、このクラスの最新バージョンで正しい新しいゲッター関数とセッター関数を使用するようにこのコードを変更する方法がわかりません。これを適切に行う方法は?上記と同じ方法で注文項目を取得するget関数はありません。
https://docs.woocommerce.com/wc-apidocs/class-WC_Order_Item_Product.html

たぶん私はここで何かを見下ろしていますか?

16
Solomon Closson

get_id()メソッドを使用すると、コードで_15_であるアイテムIDを取得します。

製品IDを取得:
製品IDを取得するための正しいWC_Order_Item_Productメソッドは、get_product_id()です。

バリエーションIDを取得します
製品IDを取得するための正しいWC_Order_Item_Productメソッドは、get_variation_id()です。

注文IDを取得します
注文IDを取得するための正しいWC_Order_Item_Productメソッドは次のとおりです。get_order_id()

WC_Productオブジェクトを取得します
WC_Productオブジェクトを取得するための正しいWC_Order_Item_Productメソッドは次のとおりです。get_product()

WC_Orderオブジェクトを取得します
WC_orderオブジェクトを取得するための正しいWC_Order_Item_Productメソッドは次のとおりです。get_order()

データとメタデータの取得と保護解除_WC_Data_ メソッドを使用:
get_data()
get_meta_data()


注文アイテムIDから_WC_Product_オブジェクトを取得します:

_$order_item_id = 15;
$item = new WC_Order_Item_Product($order_item_id);

// The product ID
$product_id = $item->get_product_id(); 

// The variation ID
$product_id = $item->get_variation_id(); 

// The WC_Product object
$product = $item->get_product(); 

// The quantity
$order_id = $item->get_quantity(); 

// The order ID
$order_id = $item->get_order_id(); 

// The WC_Order object
$order = $item->get_order(); 

// The item ID
$item_id = $item->get_id(); // which is your $order_item_id

// The product name
$product_name = $item->get_name(); // … OR: $product->get_name();

//Get the product SKU (using WC_Product method)
$sku = $product->get_sku();
_

_WC_Order_オブジェクトから注文アイテムを取得します(および使用する _WC_product_ オブジェクト)

_$order_id = 156; // The order_id

// get an instance of the WC_Order object
$order = wc_get_order( $order_id );

// The loop to get the order items which are WC_Order_Item_Product objects since WC 3+
foreach( $order->get_items() as $item_id => $item ){
    //Get the product ID
    $product_id = $item->get_product_id();

    //Get the variation ID
    $product_id = $item->get_variation_id();

    //Get the WC_Product object
    $product = $item->get_product();

    // The quantity
    $product_name = $item->get_quantity();

    // The product name
    $product_name = $item->get_name(); // … OR: $product->get_name();

    //Get the product SKU (using WC_Product method)
    $sku = $product->get_sku();
}
_

データとカスタムメタデータへのアクセス:

1)_WC_Order_Item_Product_データの保護解除およびカスタムメタデータ:

すべての _WC_Order_Item_Product data_ メソッドを使用するか、次のメソッド _WC_Data_ を使用してデータの保護を解除できます。

_$order_id = 156; // The order_id

// get an instance of the WC_Order object
$order = wc_get_order( $order_id );

// The loop to get the order items which are WC_Order_Item_Product objects since WC 3+
foreach( $order->get_items() as $item_id => $item ){

    // Get the common data in an array: 
    $item_product_data_array = $item->get_data();

    // Get the special meta data in an array: 
    $item_product_meta_data_array = $item->get_meta_data();

    // Get the specific meta data from a meta_key: 
    $meta_value = $item->get_meta( 'custom_meta_key', true );

    // Get all additional meta data (formatted in an unprotected array)
    $formatted_meta_data = $item->get_formatted_meta_data( ' ', true );
}
_

2)配列アクセスは引き続き可能です(レガシー配列との後方互換性のために)共通データを直接取得するには:

_$order_id = 156; // The order_id

// get an instance of the WC_Order object
$order = wc_get_order( $order_id );

// The loop to get the order items which are WC_Order_Item_Product objects since WC 3+
foreach( $order->get_items() as $item_id => $item ){


    $product_id    = $item['product_id']; // Get the product ID
    $variation_id  = $item['variation_id']; // Get the variation ID

    $product_name  = $item['name']; // The product name
    $item_qty      = $item['quantity']; // The quantity
    $line_subtotal = $item['line_subtotal'];  // The line subtotal
    $line_total    = $item['line_total'];  // The line subtotal

    // And so on ……
}
_

参考として:

32
LoicTheAztec

WC_Order_Item_Productは、get_order_id()を持つWC_Order_Itemを継承するため、次の方法で注文IDを取得できます。

$order_item->get_order_id();
2
ishegg