web-dev-qa-db-ja.com

Woocommerce 3での注文アイテム保護データへのアクセス

注文のラインアイテムを取得しようとしています。

私はこれをやっています:

$order = new WC_Order(147);
foreach ($order->get_items() as $key => $lineItem) {
    print_r('<pre>----');
    print_r($lineItem);
    print_r('----</pre>');
}

私は必要なすべてのデータを見ることができますが、配列はこれを示しています:

[meta_data:protected] => Array

この配列にアクセスして値を取得するにはどうすればよいですか?

ありがとう。

8
bstras21

WooCommerce 3.0以降のOrderアイテムには、新しいオブジェクトクラス _WC_Order_Item_Product_ があります。
現在、注文アイテムのプロパティには以前のように直接アクセスできません

したがって、出力生データを見ると、各ラインアイテムがオブジェクトになっていることがわかり、排他的に使用して保護されたデータにアクセスできます。

  1. _WC_Order_Item_Product_gettersメソッド(または、setterメソッドで変更する)…
  2. _WC_Order_Item_get_formatted_meta_data( '', true )すべてのメタデータにアクセスするメソッド。アクセス可能なオブジェクトの配列を提供します。各メタデータにアクセスするには、 _WC_Data_ メソッドget_meta()を参照してください。
  3. _WC_Data_ gettersメソッドを使用して、このデータの保護を解除し、メソッドを使用して配列を介してアクセスします:
    • get_data()(この方法は非常に便利です)
    • get_meta()(この方法が最も便利です)
    • get_data_keys()
    • get_meta_data()データの保護を解除しませんget_formatted_meta_data()を使用します
  4. wc_get_order_item_meta() 専用関数。

_WC_Order_Item_Product_ゲッターメソッド

_// Get an instance of the WC_Order object
$order = wc_get_order(147);

// Iterating through each order item
foreach ($order->get_items() as $item_id => $item ) {
    echo $item->get_type().'<br>'; // The order item type
    echo $item->get_product_id().'<br>'; // The Product ID
    echo $item->get_variation_id().'<br>'; // The variation ID
    echo $item->get_quantity().'<br>'; // Line item quantity
    echo $item->get_subtotal().'<br>'; // Line item subtotal
    echo $item->get_total().'<br>'; // Line item total

    // The associated product object (which properties can't be accessed directly too)
    echo '<pre>'; print_r( $item->get_product() ); echo '</pre>'; 

    // ... and so on ...

    ## Testing raw output (protected)
    // echo '<pre>'; print_r($item); echo '</pre>';
}
_

wc_get_order_item_meta() 関数。ここでは、_wp_woocommerce_order_itemmeta_テーブルに移動し、対応する_meta_key_(_line_item_データ型の場合)を使用してアイテムIDのデータを出力できますアイテムID):

_// Get an instance of the WC_Order object
$order = wc_get_order(147);

// Iterating through each order item
foreach ($order->get_items() as $item_id => $item ) {

    echo wc_get_order_item_meta( $item_id, '_product_id', true). '<br>'; // Product ID
    echo wc_get_order_item_meta( $item_id, '_variation_id', true). '<br>'; // Variation ID
    echo wc_get_order_item_meta( $item_id, '_qty', true). '<br>'; // quantity
    echo wc_get_order_item_meta( $item_id, '_line_subtotal', true). '<br>'; // Line subtotal

    // ... and so on ...

    ## Testing raw output (protected data)
    // echo '<pre>'; print_r($item); echo '</pre>';
}
_

_WC_Data_ メソッドget_data()メソッド(配列内のデータの保護を解除するため):

_// Get an instance of the WC_Order object
$order = wc_get_order(147);

// Iterating through each order item
foreach ($order->get_items() as $item_id => $item ) {

    // Get the most useful Item product data in an accessible array
    $item_data = $item->get_data();

    echo $item_data['id'].'<br>'; // The order item ID
    echo $item_data['order_id'].'<br>'; // The order ID
    echo $item_data['product_id'].'<br>'; // The Product ID
    echo $item_data['variation_id'].'<br>'; // The Variation ID
    echo $item_data['name'].'<br>'; // The Product title (name)
    echo $item_data['quantity'].'<br>'; // Line item quantity
    echo $item_data['subtotal'].'<br>'; // Line item subtotal
    echo $item_data['total'].'<br>'; // Line item total

    // ... and so on ...
_

_WC_Data_ メソッドget_meta()メソッド(メタキーで各プロパティにアクセスするため):

_// Get an instance of the WC_Order object
$order = wc_get_order(147);

// Iterating through each order item
foreach ($order->get_items() as $item_id => $item ) {

    echo $item->get_meta('_product_id').'<br>'; // The Product ID
    echo $item->get_meta('_variation_id').'<br>'; // The Variation ID
    echo $item->get_meta('_qty').'<br>'; // Line item quantity
    echo $item->get_meta('_line_subtotal').'<br>'; // Line item subtotal
    echo $item->get_meta('_line_subtotal_tax').'<br>'; // Line item subtotal tax
    echo $item->get_meta('_line_total').'<br>'; // Line item total
    echo $item->get_meta('_line_tax').'<br>'; // Line item total tax

    // Product attributes for variation
    echo $item->get_meta('pa_color').'<br>'; // Color
    echo $item->get_meta('pa_size').'<br>'; // Color

    // Custom item meta gata
    echo $item->get_meta('custom_meta_key').'<br>'; // custom meta key visible
    echo $item->get_meta('_custom_meta_key').'<br>'; // custom meta key not visible


    // ... and so on ...
_

関連: WooCommerce注文の詳細を取得する方法

23
LoicTheAztec

_[meta_data:protected] => Array_のデータを取得するには別のメソッドを使用する必要があります。

これを使うだけ$item_obj->get_meta_data();

それらを取得するより詳細な方法は、次のように2回繰り返します。

_  $order = wc_get_order( $order_id );
  foreach ($order->get_items() as $item_id => $item_obj) {

         $kua = $item_obj->get_meta_data();

         foreach ($kua as $key => $value) {
            foreach ($value as $key2 => $value2) {
               echo $key2.'->'.$value2.'<br>';
            }
        }
  }
_

メソッドのコレクションは here にあります

2