WooCommerce Cart Recovery releasesself-updates
WooCommerce Cart Recovery helps store owners recover abandoned carts using up to three reminder emails, optional native WooCommerce coupons, signed recovery links and local statistics.
by 22MW · github.com/22mw/woocommerce-cart-recovery · website
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/22mw/woocommerce-cart-recovery/releases/download/v0.1.48/woocommerce-cart-recovery.zipShips its own WordPress updater (built-in updater), so new versions show up under Dashboard → Updates.
Readme
WooCommerce Cart Recovery
WooCommerce Cart Recovery ayuda a recuperar carritos abandonados y pedidos impagados con un flujo propio integrado con WooCommerce.
Qué hace el plugin
- Captura carritos cuando existe un email válido.
- Soporta checkout clásico y WooCommerce Checkout Blocks.
- Detecta carritos abandonados según el tiempo configurado.
- Importa y reutiliza pedidos
pendingyfailedde WooCommerce. - Envía hasta 3 emails de recuperación con delays independientes.
- Genera cupones nativos de WooCommerce por email.
- Crea enlaces firmados de recuperación.
- Restaura el carrito al hacer click en el email.
- Registra en qué email hicieron click.
- Marca como recuperado cuando el pedido termina correctamente.
- Invalida todos los enlaces de recuperación una vez el carrito está recuperado.
- Revoca todos los cupones generados al recuperar el carrito.
- Guarda el total real pagado (
recovered_total) con descuentos aplicados. - Permite excluir productos y términos taxonómicos completos del flujo de recovery.
- Expande exclusiones automáticamente a traducciones WPML/Polylang.
- Mantiene estadísticas de:
- carritos abandonados
- clicks de recuperación
- carritos recuperados
- ingresos recuperados
- emails enviados
- Limpia datos antiguos del plugin y pedidos impagados gestionados por el propio flujo.
Cómo captura correctamente
El plugin no guarda carritos “a ciegas”. Solo crea un caso cuando hay contexto suficiente.
Carrito
- Usa la sesión de WooCommerce como identidad principal del carrito vivo.
- Mientras el carrito siga siendo un intento activo y limpio, actualiza la misma fila.
- Si ese intento ya tuvo abandono, click o recovery, un nuevo intento crea un caso nuevo.
- No reutiliza una fila vieja solo por coincidir el email.
Checkout clásico
Captura desde hooks nativos de WooCommerce:
woocommerce_cart_updatedwoocommerce_checkout_update_order_review
Con esto el plugin puede guardar email, nombre, contenido y total cuando el cliente ya interactúa con el checkout o el carrito.
Checkout Blocks
Captura desde hooks y eventos del Store API:
woocommerce_store_api_cart_update_customer_from_requestwoocommerce_store_api_checkout_update_order_from_request- AJAX propio para capturar email/nombre cuanto antes en Blocks
Además enlaza pedidos creados desde Blocks usando:
woocommerce_store_api_checkout_order_processed
Cómo detecta el abandono
- Primero el caso queda como
active. - Cuando supera el tiempo configurado sin actividad, pasa a
abandoned. - La cola de emails solo trabaja sobre casos
abandoned. - Las tareas recurrentes del plugin se ejecutan con
WooCommerce Action Scheduler.
Cómo gestiona pedidos impagados
El plugin puede trabajar también sobre pedidos reales de WooCommerce:
- detecta
pending - detecta
failed - puede importarlos manualmente desde ajustes
- si hay coincidencia clara con un carrito capturado, hace merge
- cuando existe pedido, el caso pasa a apoyarse en ese pedido como fuente principal
Exclusiones de recovery
El plugin permite excluir casos completos antes de entrar en el flujo.
- Puedes excluir productos concretos.
- Puedes excluir términos de taxonomías de producto.
- Si un carrito contiene al menos una exclusión:
- no se captura
- no entra en
abandoned - no envía emails
- no aparece en admin
- Si un pedido
pendingofailedcontiene una exclusión:- no se importa
Cómo se configuran
En Cart Recovery > Settings:
Excluded productsExcluded taxonomy terms
Los selectores funcionan con búsqueda/autocomplete y guardan la selección en forma de tokens.
Multidioma en exclusiones
Si la tienda usa WPML o Polylang:
- al seleccionar un producto, el plugin expande y guarda también sus traducciones
- al seleccionar un término, el plugin expande y guarda también sus traducciones
Con eso no hace falta excluir manualmente el mismo producto o término en cada idioma.
Cómo funciona la recuperación
- Cada email puede llevar su propio cupón y enlace.
- El enlace va firmado con token.
- Al abrirlo:
- restaura el carrito
- aplica el cupón si existe
- registra el step clicado
- redirige a checkout
- Si el cliente clica sin pagar, los siguientes pasos de email siguen enviándose en su delay.
- Una vez el carrito pasa a
recovered, todos los enlaces dejan de funcionar y todos los cupones generados se eliminan.
Mientras ese recovery está activo:
- el plugin no debe crear un carrito abandonado nuevo del mismo checkout restaurado
Multidioma y locale
El plugin está preparado para trabajar con tiendas multidioma y guardar el idioma real del caso de recovery.
Qué detecta
- idioma y locale del carrito capturado
- idioma y locale del pedido importado
- idioma activo en instalaciones con:
- WPML
- Polylang
- fallback WordPress si no hay plugin multidioma
Qué guarda
Cada caso de recovery guarda su locale para poder reutilizarlo después en:
- resolución del asunto del email
- resolución del cuerpo del email
- render del email
- logs de envío
Ajustes por idioma
En Cart Recovery > Settings:
- cada idioma activo aparece en su propia tab
- cada step de email tiene
SubjectyBodyindependientes por idioma - lo guardado por idioma tiene prioridad sobre cualquier valor por defecto
Defaults traducidos
Si una tab todavía no tiene contenido guardado:
- el plugin intenta cargar los defaults traducidos del propio plugin para ese idioma
- si no existe traducción exacta, usa fallback al idioma equivalente soportado
- si tampoco existe, usa inglés
en_US - después, locale por defecto del sitio
Además, cada bloque tiene un botón:
Reset to translated defaults
Ese botón:
- restaura solo el
step + idiomaactual - no toca otros idiomas
- no toca otros steps
Envío según idioma del carrito
Cuando el plugin envía un email:
- usa el
localeguardado en el caso - resuelve el
subject/bodyde ese idioma - cambia el idioma del plugin para cargar sus cadenas traducidas
- y renderiza el email con ese contexto
Esto permite que:
- un carrito en español reciba email en español
- un carrito en inglés reciba email en inglés
- un carrito en alemán reciba email en alemán
Compatibilidad comprobada
Este flujo multidioma ha sido comprobado con:
- WPML
Y mantiene compatibilidad de diseño con:
- Polylang
- fallback WordPress estándar cuando no hay plugin multidioma
Además, el plugin incluye catálogos para:
es_ESen_USde_DEca_ES
Cómo marca una compra recuperada
El plugin marca recovered cuando puede enlazar el pedido al caso de recovery y el pedido pasa por estados válidos de compra:
on-holdprocessingcompletedpayment_complete
También soporta:
woocommerce_checkout_order_processedwoocommerce_store_api_checkout_order_processed
para enlazar correctamente pedidos de checkout clásico y Blocks.
Qué guarda en cada caso
Cada caso de recovery tiene su propia identidad y puede guardar:
- nombre del cliente
- sesión
- locale
- snapshot del carrito
- total y moneda
- origen del caso (
cartoorder) - pedido enlazado si existe
- step clicado
- pedido recuperado final
- total real pagado (
recovered_total) cuando hay descuento aplicado
Seguridad y buenas prácticas
El plugin sigue un enfoque WordPress/WooCommerce:
- nonces en acciones de admin
- capability checks
- sanitización y escaping
- acceso directo bloqueado
- cupones nativos de WooCommerce
- hooks nativos de WooCommerce y Store API
- text domain listo para traducción
- catálogos
.po/.mopor idioma para interfaz y defaults del plugin
Qué no hace
- no usa un sistema nativo de “abandoned carts” de WooCommerce, porque WooCommerce no trae un módulo completo de recovery
- no hace tracking remoto
- no carga código remoto ejecutable
Pantallas de admin
-
Cart Recovery- estadísticas
- fichas de recovery
- estado, origen, pedido enlazado y detalle por email
- detalle de emails plegable por carrito
- acciones manuales para ejecutar cola/importación
-
Settings- tiempos
- limpieza
- steps de email
- descuentos
- exclusiones de productos y taxonomías
- importación de pedidos impagados
- ejecución manual del detector y la cola
Read the full README on GitHub →
Releases
| Tag | Published | Asset | Downloads |
|---|---|---|---|
| v0.1.48 | Apr 9, 2026 | woocommerce-cart-recovery.zip | 7 |
| v0.1.47 | Apr 9, 2026 | woocommerce-cart-recovery.zip | 4 |
| v0.1.46 | Apr 8, 2026 | woocommerce-cart-recovery.zip | 4 |
| v0.1.45 | Apr 8, 2026 | woocommerce-cart-recovery.zip | 4 |
| v0.1.44 | Apr 8, 2026 | woocommerce-cart-recovery.zip | 0 |
| v0.1.43 | Apr 8, 2026 | woocommerce-cart-recovery.zip | 3 |
| v0.1.42 | Apr 8, 2026 | woocommerce-cart-recovery.zip | 2 |
| v0.1.41 | Apr 8, 2026 | woocommerce-cart-recovery.zip | 1 |
| v0.1.40 | Apr 8, 2026 | woocommerce-cart-recovery.zip | 1 |
| v0.1.39 | Apr 8, 2026 | woocommerce-cart-recovery.zip | 1 |
| v0.1.38 | Apr 8, 2026 | woocommerce-cart-recovery.zip | 1 |
| v0.1.37 | Apr 7, 2026 | woocommerce-cart-recovery.zip | 7 |
| v0.1.36 | Apr 7, 2026 | woocommerce-cart-recovery.zip | 1 |