Obtenga artículos de pedido y WC_Order_Item_Product en WooCommerce 3
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 get
funció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í?
Si utiliza el
get_id()
método, obtendrá el ID de su artículo que se encuentra15
en su código.
Obtener el ID del producto:
el método correcto WC_Order_Item_Product
para obtener el ID del producto es:get_product_id()
Obtener el ID de variación :
el método correcto WC_Order_Item_Product
para obtener el ID de variación es:get_variation_id()
Obtener el ID del pedido
El método correcto WC_Order_Item_Product
para obtener el ID del pedido es:get_order_id()
Obtener el objeto WC_Product
El método correcto WC_Order_Item_Product
para obtener WC_Product
el objeto es:
get_product()
Obtener el objeto WC_Order
El método correcto WC_Order_Item_Product
para obtener WC_order
el objeto es:
get_order()
Obtener y desproteger los datos y metadatos utilizando WC_Data
los métodos:
get_data()
get_meta_data()
Obtenga el WC_Product
objeto 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_Order
objeto (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_Product
de datos y metadatos personalizados:
Puede utilizar todos WC_Order_Item_Product data
los métodos o puede desproteger los datos utilizando WC_Data
los 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
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();