Ir al contenido

Pedidos por transferencia sin pagar

El ajuste Retener stock (minutos) de WooCommerce solo cancela pedidos que se quedan en Pendiente de pago. Una transferencia bancaria (BACS) deja el pedido En espera, así que ese temporizador nunca lo toca y una transferencia sin pagar puede bloquear la última unidad indefinidamente. Este módulo cierra ese hueco.

Propuesto por 5trid3rr en wppoland/polski#74.

Vaya a Polski > Módulos y active Unpaid bank transfer orders (clave del módulo unpaid_orders), en el grupo “Checkout and Orders”.

Ajuste Descripción Por defecto
Métodos de pago a los que se aplica Ids de pasarela separados por comas bacs
Enviar un recordatorio de pago Si la etapa de recordatorio se ejecuta
Recordar tras, horas desde la fecha del pedido Primer reloj 24
Cancelar el pedido si sigue sin pagarse Si la etapa de cancelación se ejecuta
Cancelar tras, horas desde la fecha del pedido Segundo reloj 48

Ambos relojes se miden desde la fecha del pedido, no desde el momento en que pasó a En espera. Un pedido puede entrar en ese estado más de una vez, y el plazo del cliente no debería reiniciarse por ello.

  1. El cliente hace el pedido y elige transferencia. WooCommerce lo deja En espera y descuenta el stock.
  2. Pasada la ventana de recordatorio, si el pedido sigue sin pagarse, el cliente recibe un recordatorio de pago y una nota del pedido lo deja registrado. Se envía una sola vez.
  3. Pasada la ventana de cancelación, si sigue sin pagarse, se avisa al cliente de la cancelación y el estado pasa a Cancelado, lo que libera el stock.
  4. Si el pago llega antes, no se ejecuta ninguno de los dos pasos.

Un pedido que ya supera la ventana de cancelación cuando se activa el módulo por primera vez se cancela directamente. No recibe un aviso de pago seguido, en la misma pasada, de un aviso de cancelación.

Cada pedido se vuelve a cargar y comprobar justo antes de actuar, porque entre la consulta y la acción la tienda puede haber cobrado. El módulo deja el pedido en paz cuando se cumple cualquiera de estas condiciones:

  • el estado ya no es En espera
  • el método de pago ya no es uno de los configurados
  • WooCommerce lo considera pagado, o tiene fecha de pago
  • se ha emitido una factura contra él
  • se ha presentado un desistimiento sobre él
  • existe una solicitud de devolución para él

Las tres últimas existen porque cancelar por debajo de un documento o de una reclamación del consumidor deja papeles que apuntan a un pedido que ya no existe.

Los dos correos son correos normales de WooCommerce. El asunto, el encabezado, el contenido adicional y el interruptor se editan en WooCommerce > Ajustes > Correos electrónicos:

  • Unpaid order reminder
  • Unpaid order cancelled

Las plantillas se pueden sobrescribir desde el tema como cualquier correo de WooCommerce, desde polski-pro/templates/emails/.

El módulo se ejecuta cada hora con WP-Cron (polski_unpaid_orders_cron) y procesa hasta 50 pedidos por pasada, de modo que un atasco grande se resuelve en varias pasadas en lugar de agotar el tiempo. Al desactivar el módulo se elimina el evento programado.

Hook Tipo Descripción
polski/unpaid_order/reminder acción Se dispara con el id del pedido al enviar un recordatorio
polski/unpaid_order/cancelled acción Se dispara con el id del pedido justo antes del cambio de estado
polski/unpaid_order/actionable filtro Devuelva false para proteger un pedido concreto
// Nunca cancelar automáticamente pedidos de más de 1000 PLN; esos, a mano.
add_filter('polski/unpaid_order/actionable', function (bool $ok, WC_Order $order): bool {
return $order->get_total() > 1000 ? false : $ok;
}, 10, 2);