
Cómo modificar un pedido en WooCommerce usando código
En ocasiones, puede ser necesario modificar ciertos aspectos de un pedido en WooCommerce mediante código, ya sea para corregir errores, aplicar reglas personalizadas o automatizar procesos administrativos.
Importante: Compatibilidad con HPOS
WooCommerce ha implementado HPOS (High-Performance Order Storage) como parte de sus mejoras de rendimiento. Este nuevo sistema almacena los pedidos en tablas personalizadas, mejorando la escalabilidad de la tienda. Debido a esto, ya no se recomienda modificar los pedidos usando update_post_meta()
o get_post_meta()
, ya que esos métodos no son totalmente compatibles con HPOS.
- Evita usar
update_post_meta()
en pedidos. En su lugar, utiliza siempre los métodos del objeto$order
, comoset_billing_first_name()
,get_meta()
,save_meta_data()
, etc. - HPOS ya está disponible como opción en WooCommerce, y pronto será el modo por defecto en nuevas instalaciones.
Obtener el pedido
<?php $orderID = 123; // Reemplaza con el ID del pedido que deseas modificar $order = wc_get_order( $orderID );
Aumentar la cantidad de un producto específico en el pedido
<?php foreach ( $order->get_items() as $itemId => $item ) { $product = $item->get_product(); if ( $product && $product->get_sku() === 'sku-del-producto' ) { $currentQty = $item->get_quantity(); $item->set_quantity( $currentQty + 1 ); } } $order->calculate_totals(); $order->save();
Cambiar el precio de un producto del pedido
<?php foreach ( $order->get_items() as $itemId => $item ) { $product = $item->get_product(); if ( $product && $product->get_id() === 456 ) { // ID del producto $item->set_total( 20.00 ); // Precio sin impuestos $item->set_subtotal( 20.00 ); } } $order->calculate_totals(); $order->save();
Cambiar el precio total del pedido (bruto)
<?php $order->set_total( 75.00 ); $order->save();
Úsalo con precaución: este cambio no actualiza automáticamente los ítems del pedido.
Modificar datos de facturación (Billing)
<?php $order->set_billing_first_name( 'Carlos' ); $order->set_billing_last_name( 'Pérez' ); $order->set_billing_email( 'carlos@example.com' ); $order->set_billing_phone( '987654321' ); $order->save();
Modificar datos de envío (Shipping)
<?php $order->set_shipping_first_name( 'Laura' ); $order->set_shipping_last_name( 'Gómez' ); $order->set_shipping_address_1( 'Calle Falsa 123' ); $order->set_shipping_city( 'Lima' ); $order->set_shipping_postcode( '15001' ); $order->save();
Consideraciones adicionales
- Siempre que modifiques cantidades o precios de productos, utiliza
$order->calculate_totals();
antes de guardar. - Si necesitas trabajar con campos personalizados (custom fields), usa
$order->get_meta()
y$order->update_meta_data()
en lugar deget_post_meta()
oupdate_post_meta()
. - Verifica siempre que el pedido existe y que tienes permisos para modificarlo.
Modificar pedidos manualmente vía código en WooCommerce es muy útil, pero debe hacerse de forma responsable y moderna. Con HPOS convirtiéndose en el estándar, es esencial que tu código sea compatible desde ya. Abandona el uso de funciones heredadas como update_post_meta()
y aprovecha los métodos propios del objeto $order
.
¿Tienes un caso específico en mente? Déjalo en los comentarios y lo analizamos juntos.