Obtenga artículos de pedido y WC_Order_Item_Product en WooCommerce 3

Resuelto Solomon Closson asked hace 54 años • 2 respuestas

Al leer los cambios en WooCommerce 3.0, parece que no es posible obtener más propiedades de los artículos pedidos directamente, por lo que asumiría que es necesario cambiar el siguiente código, ya que arroja un error:

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

Pero, vergonzosamente, no estoy seguro de cómo cambiar este código para usar las nuevas funciones getter y setter correctas en la versión más reciente de esta clase, que ya no tiene una construcción. ¿Cómo hacer esto correctamente? No veo ninguna getfunción para obtener el artículo del pedido de la misma manera que lo anterior.
https://docs.woocommerce.com/wc-apidocs/class-WC_Order_Item_Product.html

¿Quizás estoy pasando por alto algo aquí?

Solomon Closson avatar Jan 01 '70 08:01 Solomon Closson
Aceptado

Si utiliza el get_id()método, obtendrá el ID de su artículo que se encuentra 15en su código.

Obtener el ID del producto:
el método correcto WC_Order_Item_Productpara obtener el ID del producto es:get_product_id()

Obtener el ID de variación :
el método correcto WC_Order_Item_Productpara obtener el ID de variación es:get_variation_id()

Obtener el ID del pedido
El método correcto WC_Order_Item_Productpara obtener el ID del pedido es:get_order_id()

Obtener el objeto WC_Product
El método correcto WC_Order_Item_Productpara obtener WC_Productel objeto es: get_product()

Obtener el objeto WC_Order
El método correcto WC_Order_Item_Productpara obtener WC_orderel objeto es: get_order()

Obtener y desproteger los datos y metadatos utilizando WC_Datalos métodos:

  • get_data()
  • get_meta_data()

Obtenga el WC_Productobjeto del ID del artículo del pedido:

$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
$variation_id = $item->get_variation_id(); 

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

// The quantity
$quantity = $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();

// Get line item totals (non discounted)
$total     = $item->get_subtotal(); // Total without tax (non discounted)
$total_tax = $item->get_subtotal_tax(); // Total tax (non discounted)

// Get line item totals (discounted when a coupon is applied)
$total     = $item->get_total(); // Total without tax (discounted)
$total_tax = $item->get_total_tax(); // Total tax (discounted)

Obtenga los artículos del pedido del WC_Orderobjeto (y use el WC_product Objeto) :

$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
    $variation_id = $item->get_variation_id();

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

    // The quantity
    $quantity = $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();

    // Get line item totals (non discounted)
    $total     = $item->get_subtotal(); // Total without tax (non discounted)
    $total_tax = $item->get_subtotal_tax(); // Total tax (non discounted)
    
    // Get line item totals (discounted when a coupon is applied)
    $total     = $item->get_total(); // Total without tax (discounted)
    $total_tax = $item->get_total_tax(); // Total tax (discounted)
}

Acceso a datos y metadatos personalizados:

1). Desprotección WC_Order_Item_Productde datos y metadatos personalizados:

Puede utilizar todos WC_Order_Item_Product datalos métodos o puede desproteger los datos utilizando WC_Datalos siguientes métodos:

$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 );


    // Get line item totals (non discounted)
    $total     = $item->get_subtotal(); // Total without tax (non discounted)
    $total_tax = $item->get_subtotal_tax(); // Total tax (non discounted)
    
    // Get line item totals (discounted when a coupon is applied)
    $total     = $item->get_total(); // Total without tax (discounted)
    $total_tax = $item->get_total_tax(); // Total tax (discounted)
}

2). El acceso a la matriz aún es posible (por compatibilidad con matrices heredadas) para obtener los datos comunes directamente:

$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

    // Get line item totals (non discounted)
    $line_total     = $item['subtotal']; // or $item['line_subtotal'] -- The line item non discounted total
    $line_total_tax = $item['subtotal_tax']; // or $item['line_subtotal_tax'] -- The line item non discounted tax total

    // Get line item totals (discounted)
    $line_total2     = $item['total']; // or $item['line_total'] -- The line item non discounted total
    $line_total_tax2 = $item['total_tax']; // The line item non discounted tax total

    // And so on ……
}

Como referencia:

  • Obtenga los metadatos de un artículo de pedido en WooCommerce 3
  • Cómo obtener los detalles del pedido de WooCommerce
LoicTheAztec avatar Aug 16 '2017 06:08 LoicTheAztec

WC_Order_Item_Product hereda de WC_Order_Item, que tiene get_order_id(), por lo que puede obtener el ID del pedido con

$order_item->get_order_id();
ishegg avatar Aug 16 '2017 06:08 ishegg