Datos de pedidos en WooCommerce versión 3.0+

Desde la última gran actualización de WooCommerce a su versión 3.0 las cosas han cambiado mucho:

No debemos acceder a las propiedades de WC_Order directamente como hacíamos antes y si lo intentamos, nos saldrá un error (aunque funcionará durante un tiempo, pero está «deprecated»).

Ahora se necesitan nuevos métodos, WC_Order y WC_Abstract_Order para conseguir los datos y para «setearlos» respectivamente
Hay una nueva clase para los elementos de los pedidos: WC_Order_Item class.
Por lo tanto, las propiedades de los elementos de pedido no estarán accesibles como antes en un bucle foreach y tendremos que usar este método específico de conseguir y establecer datos.

Uso de algunos métodos WC_Order y WC_Abstract_Order (ejemplo):

<?php
// Get an instance of the WC_Order object (same as before)
$order = wc_get_order( $order_id );

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

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

// ... and so on ...
?>

Obtener y acceder a las propiedades de los datos del pedido (en una matriz de valores):

<?php
// Get an instance of the WC_Order object
$order = wc_get_order( $order_id );
$order_data = $order->get_data();

// The Order data
$order_id = $order_data['id'];
$order_parent_id = $order_data['parent_id'];
$order_status = $order_data['status'];
$order_currency = $order_data['currency'];
$order_version = $order_data['version'];
$order_payment_method = $order_data['payment_method'];
$order_payment_method_title = $order_data['payment_method_title'];
$order_payment_method = $order_data['payment_method'];
$order_payment_method = $order_data['payment_method'];
?>

Creación y modificación de fecha del objeto (WC_DateTime):

<?php
// Using a formated date ( with php date() function as method)
$order_date_created = $order_data['date_created']->date('Y-m-d H:i:s');
$order_date_modified = $order_data['date_modified']->date('Y-m-d H:i:s');

// Using a timestamp ( with php getTimestamp() function as method)
$order_timestamp_created = $order_data['date_created']->getTimestamp();
$order_timestamp_modified = $order_data['date_modified']->getTimestamp();
$order_discount_total = $order_data['discount_total'];
$order_discount_tax = $order_data['discount_tax'];
$order_shipping_total = $order_data['shipping_total'];
$order_shipping_tax = $order_data['shipping_tax'];
$order_total = $order_data['cart_tax'];
$order_total_tax = $order_data['total_tax'];
$order_customer_id = $order_data['customer_id'];
// ... and so on
?>

Información de facturación:

<?php
$order_billing_first_name = $order_data['billing']['first_name'];
$order_billing_last_name = $order_data['billing']['last_name'];
$order_billing_company = $order_data['billing']['company'];
$order_billing_address_1 = $order_data['billing']['address_1'];
$order_billing_address_2 = $order_data['billing']['address_2'];
$order_billing_city = $order_data['billing']['city'];
$order_billing_state = $order_data['billing']['state'];
$order_billing_postcode = $order_data['billing']['postcode'];
$order_billing_country = $order_data['billing']['country'];
$order_billing_email = $order_data['billing']['email'];
$order_billing_phone = $order_data['billing']['phone'];
?>

Información de envío:

<?php
$order_shipping_first_name = $order_data['shipping']['first_name'];
$order_shipping_last_name = $order_data['shipping']['last_name'];
$order_shipping_company = $order_data['shipping']['company'];
$order_shipping_address_1 = $order_data['shipping']['address_1'];
$order_shipping_address_2 = $order_data['shipping']['address_2'];
$order_shipping_city = $order_data['shipping']['city'];
$order_shipping_state = $order_data['shipping']['state'];
$order_shipping_postcode = $order_data['shipping']['postcode'];
$order_shipping_country = $order_data['shipping']['country'];
?>

Obtener los elementos de pedido y acceder a los datos con el método WC_Order_Item:

<?php
// Get an instance of the WC_Order object
$order = wc_get_order( $order_id );

// Iterating through each WC_Order_Item objects
foreach( $order-> get_items() as $item_key => $item_values ):

## Using WC_Order_Item methods ##

// Item ID is directly accessible from the $item_key in the foreach loop or
$item_id = $item_values->get_id();

$item_name = $item_values->get_name(); // Name of the product
$item_type = $item_values->get_type(); // Type of the order item ("line_item")

## Access Order Items data properties (in an array of values) ##
$item_data = $item_values->get_data();

$product_name = $item_data['name'];
$product_id = $item_data['product_id'];
$variation_id = $item_data['variation_id'];
$quantity = $item_data['quantity'];
$tax_class = $item_data['tax_class'];
$line_subtotal = $item_data['subtotal'];
$line_subtotal_tax = $item_data['subtotal_tax'];
$line_total = $item_data['total'];
$line_total_tax = $item_data['total_tax'];

endforeach;
?>

Así, el uso del método get_data() nos permite acceder a los datos protegidos (en forma de array asociativo)

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.