使用WooCommerce订单项目获取特定的数据结构

时间:2019-01-22 13:14:56

标签: php wordpress woocommerce orders

对于一个已下订单且该订单有3个产品的订单,我需要获取一种格式如下的数据结构:

[items] => Array
(
    [0] => Array
    (
        [sku] => Product 1 sku
        [qty] => Product 1 qty
        [price] => Product 1 price
        [weight] =>
        [discount] =>
        [line_ref] =>
    )

    [1] => Array
    (
        [sku] => Product 2 sku
        [qty] => Product 2 qty
    )

    [2] => Array
    (
        [sku] => Product 3 sku
        [qty] => Product 3 qty
    )

)

这是我的代码:

$order = new WC_Order( $order_id );
// Get the order ID
$order_id = $order->get_id();

// Get data from Items
foreach ( $order->get_items() as $item_key => $item_values ) {  

    $product_id = $item_values->get_product_id(); // the Product id
    $product = $item_values->get_product(); // the WC_Product object
    $item_data = $item_values->get_data();

     $item = array(array(
        'sku'       => $product->get_sku(),
        'qty'       => $item_data['quantity'],
        'price'     => $product->get_price(),
        'weight'    => '',
        'discount'  => '',
        'line_ref'  => ''
        ),
        array(
        'sku'       => $product->get_sku(),
        'qty'       => $item_data['quantity'],
        )
     );

}
print_r($item);

我该如何实现?

我正在获得订单中第一个产品的唯一数据。 如果我做print_r($ item);在foreach循环中,然后根据订单中产品的数量重复整个数据。

1 个答案:

答案 0 :(得分:0)

尝试以下

// Get an instance of the order Object
$order = wc_get_order( $order_id );

// Get the order ID
$order_id = $order->get_id();

// Initialising
$items_data = array(); 
$count = 0;

// Loop through Order items
foreach ( $order->get_items() as $item_id => $item ) {  
    $product_id = $item->get_product_id(); // the Product id
    $product    = $item->get_product(); // the WC_Product object
    $item_data  = $item->get_data(); // The line item unprotected data (array)

    if( $count === 0 ) {
        $items_data[] = array(
            'sku'       => $product->get_sku(),
            'qty'       => $item->get_quantity(),
            'price'     => $product->get_price(),
            'weight'    => '',
            'discount'  => '',
            'line_ref'  => ''
        );
    } else {
        $items_data[] = array(
            'sku'       => $product->get_sku(),
            'qty'       => $item->get_quantity(),
        );
    }
    $count++;
}
$output = array('items' => $items_data );

// Testing output
print_r($output);

它应该更好地发挥作用。