
Cancelar automáticamente un pedido en WooCommerce que ha fallado 3 veces
En WooCommerce, cuando un pago falla, el pedido cambia al estado «fallido«. Esto puede pasar por varios motivos: tarjeta rechazada, fondos insuficientes, o un error con la pasarela de pago. En tiendas con bastante volumen, tener muchos pedidos fallidos puede ensuciar el sistema y causar confusión.
Una solución muy útil es cancelar automáticamente cualquier pedido que haya fallado 3 veces, para mantener tu tienda limpia y ordenada.
En este artículo te muestro cómo hacerlo con un snippet en PHP que podés pegar en el archivo functions.php
de tu tema hijo o usarlo dentro de un plugin personalizado.
¿Cómo funciona la lógica?
- Cada vez que un pedido cambia al estado «fallido», vamos a contar cuántas veces ese mismo pedido ya falló.
- Guardamos ese número en un metadato personalizado del pedido.
- Si el contador llega a 3, cambiamos el estado del pedido a «cancelado» automáticamente.
Código PHP para cancelar pedidos fallidos 3 veces
<?php add_action( 'woocommerce_order_status_failed', 'autoCancelFailedOrder' ); function autoCancelFailedOrder( $orderId ) { $order = wc_get_order( $orderId ); if ( ! $order ) { return; } // Obtener el número actual de fallos $failCount = $order->get_meta( '_fail_count' ); if ( ! $failCount ) { $failCount = 1; } else { $failCount++; } // Guardar el nuevo número de fallos $order->update_meta_data( '_fail_count', $failCount ); $order->save(); // Cancelar el pedido si falló 3 veces if ( $failCount >= 3 ) { $order->update_status( 'cancelled', 'Pedido cancelado automáticamente luego de 3 intentos fallidos.' ); } }
¿Dónde coloco este código?
Tienes dos opciones:
- En el archivo
functions.php
de tu tema hijo. Recomendado si no tenés un plugin personalizado. - Dentro de un plugin personalizado, si querés mantener tu código separado del tema.
¿Puedo personalizar este comportamiento?
Claro que sí. Algunas ideas:
- En lugar de cancelar, podrías enviar una notificación por correo al admin.
- Podés reducir el número de intentos (por ejemplo, cancelarlo después de 2 fallos).
- Incluso podrías mover el pedido a un estado personalizado como
en-espera-verificación
.
Este pequeño snippet puede ayudarte a mantener tu tienda WooCommerce más organizada, evitando pedidos fallidos acumulados. Además, te permite automatizar una tarea que, de otra forma, deberías hacer a mano.