Edición: Exclusivo de Modal COD Form PRO (v5.0+) | Custom Post Type: abandoned_carts (Menú COD Form → Carritos & abandonos)

En el comercio electrónico tradicional, un carrito abandonado solo se registra si el usuario llega hasta la página de Checkout. Con Modal COD Form PRO v5.0, el script asíncrono cod-abandoned-cart.js y la clase PRCOD_Abandoned_Cart_Handler capturan los datos del cliente y su selección de productos directamente mientras escribe en el formulario modal, sin ralentizar su navegación.

1. ¿Cómo Funciona la Captura en Tiempo Real en el Modal?

  1. Disparo Inicial (Debounce de 2000 ms): Tan pronto el visitante introduce un correo electrónico válido en el campo #email del formulario modal, se ejecuta la acción AJAX cod_save_abandoned_cart creando un registro con ID de sesión único (cod_session_{timestamp}_{rand}) en estado pending.
  2. Actualización Progresiva de Datos (Debounce de 1000 ms): A medida que el usuario completa su Nombre (#first_name), Apellido (#last_name), Teléfono/WhatsApp (#phone) o Documento (#document), el registro se actualiza automáticamente en segundo plano.
  3. Sincronización de Ofertas por Cantidad y Upsells 1-Tick: Si el comprador cambia de escalón en una Oferta por Cantidad o marca productos dentro del carrusel del Upsell 1-Tick, el carrito abandonado guarda exactamente qué productos de Upsell tenía marcados (con la bandera is_upsell: true y su precio con descuento verificado en el servidor).

2. Máquina de Estados del Ciclo de Vida del Carrito Abandonado

Cada registro dentro de COD Form → Carritos & abandonos evoluciona automáticamente a través de 6 estados almacenados en el metadato cod_ac_status:

Estado Interno Etiqueta en Panel Cuándo se Asigna y Qué Acción Dispara
pending ⏳ Pendiente El cliente acaba de ingresar sus datos en el modal y aún no se ha cumplido el tiempo de corte configurado (por defecto 60 minutos en cod_form_abandoned_cart_cutoff_time).
abandoned 🔴 Abandonado La tarea programada (WP-Cron cada 5 minutos) detecta que el carrito lleva más del tiempo de corte en pending sin comprar. Dispara el hook do_action('cod_cart_abandoned', $post_id) y el Webhook de Carrito Abandonado.
completed ✅ Completado El cliente finalizó su compra normalmente antes de que se cumpliera el tiempo de abandono. Guarda el ID del pedido en cod_ac_order_id con enlace directo a la orden.
recovered 🎉 Recuperado El carrito ya estaba en estado abandoned, pero el cliente regresó más tarde y completó la orden (por COD o por pasarela). El buscador inteligente (find_pending_or_abandoned_cart) cruza por session_id → email → phone, enlaza la orden creada y dispara el Webhook de Carrito Recuperado.
blocked 🚫 Bloqueado El intento de compra fue detenido por el motor de Prevención de Fraude. Registra la razón exacta en cod_ac_block_reason y dispara el Webhook de Carrito Bloqueado.
expired ⏰ Expirado Carritos abandonados con más de 30 días de antigüedad marcados automáticamente por la rutina de limpieza.

Siguientes Pasos