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.phpde 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.




