«¿Puede cambiar mi pedido a la talla 32 en lugar de la 30?» es uno de los mensajes más habituales que recibe una tienda de moda online después del checkout, y WooCommerce no tiene ninguna respuesta integrada para ello.
Dos obstáculos distintos
El primer obstáculo es que los artículos de un pedido de WooCommerce no tienen ninguna acción de «cambiar variación» en la interfaz. Puede editar la cantidad y el precio de una línea, o eliminarla y añadir otro producto desde cero, pero cambiar solo la variación manteniendo el mismo producto, precio y cantidad no está disponible.
El segundo obstáculo, menos evidente, es que la edición nativa de líneas de WooCommerce solo funciona mientras $order->is_editable() devuelve true, lo que en una instalación estándar significa que el pedido está en pending, on-hold o auto-draft. En la práctica, casi todos los pedidos reales ya han pasado a Processing cuando el cliente pide cambiar la talla, y eso bloquea por completo el editor nativo.
Lo que construimos
Añadimos un enlace Change variant bajo cada línea de producto variable en la pantalla de edición del pedido, independiente a propósito de la comprobación is_editable() de WooCommerce y limitado solo a los permisos de administrador, porque corregir una variante a posteriori es justo la situación en la que el pedido ya ha avanzado. Al pulsarlo se cargan todas las combinaciones de talla, color y largo del producto como botones clicables, reutilizando el mismo selector creado para el Manual Order Creator.
Al elegir una nueva variación se llama al método propio de WooCommerce WC_Order_Item_Product::set_variation(), el mismo que usa el checkout al crear la línea, de modo que los metadatos de atributos quedan exactamente con la forma que espera el resto de WooCommerce, en lugar de una aproximación hecha a mano que falla en los correos de pedido o en las exportaciones CSV.
Cada cambio también escribe una nota en el pedido con lo que cambió exactamente (por ejemplo, de Size 56 / Length 43 / Deep Blue a Size 50 / Length 43 / Deep Blue), para que haya un registro claro si un cliente discute lo que recibió.
Lo que no hace, a propósito
Esta función solo cambia la identidad de la variación: talla, color, largo y nombre del artículo. No modifica automáticamente el precio, la cantidad ni el stock. Es un límite deliberado: cambiar sin avisar lo que se cobró a un cliente o ajustar el inventario automáticamente son decisiones que el personal debe tomar de forma explícita, no efectos secundarios de una corrección de talla.
Conclusiones clave
- Una función que solo funciona mientras un pedido es «editable» en el sentido estricto de la plataforma suele resolver el caso equivocado: la necesidad real aparece cuando esa ventana ya se ha cerrado.
- Reutilizar los métodos setter de la propia plataforma, en lugar de escribir metadatos directamente, es lo que mantiene los cambios a medida compatibles con todo lo que lee esos datos.
- Marcar explícitamente lo que una función no toca (precio, stock) es tan importante como lo que hace.
Lecturas relacionadas: ampliar la ventana de vista previa del pedido, cómo creamos un plugin de pedidos manuales.
¿Se encuentra con una limitación parecida en su panel de WooCommerce o WordPress? Hablemos: en ArtinTech Solution creamos exactamente este tipo de herramientas a medida para tiendas.