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.
Configuración
Sección titulada «Configuración»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 | Sí |
| 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 | Sí |
| 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.
Qué ocurre
Sección titulada «Qué ocurre»- El cliente hace el pedido y elige transferencia. WooCommerce lo deja En espera y descuenta el stock.
- 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.
- 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.
- 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.
Qué no toca
Sección titulada «Qué no toca»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 correos
Sección titulada «Los correos»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/.
Programación
Sección titulada «Programación»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);