How it works
From the first product in a cart to a recovered order: what the plugin records, when it acts, and why it never chases a customer who already bought.
The cart lifecycle
Every status
| Status | Shown as | Meaning |
|---|---|---|
active | Active | The shopper is still shopping, or left only recently. |
abandoned | Abandoned | No activity for longer than Abandoned After. The cart is waiting for its reminder. |
recovery_sent | Recovery email sent | The reminder went out. |
recovered | Recovered | The shopper came back through the recovery link: their cart was restored and their browser confirmed the visit (or they placed an order). You can also set it with Mark as recovered. |
completed | Completed / Recovered purchase | The order was placed and reached a paid status, or on-hold for offline payment. If the shopper came through a recovery link, the list shows Recovered purchase and the revenue counts as recovered. |
expired | Expired | The cart was emptied after it was abandoned or emailed, the customer bought in another order, or nothing happened for Expire Idle Carts After days (30 by default) and its recovery link has run out. Its link no longer works. |
Allowed changes
A shopper who returns to an abandoned or emailed cart on their own sets it back to Active, and the clock restarts. Completed and Expired are final.
| From | Can move to |
|---|---|
active | abandoned, recovered, completed, expired |
abandoned | active, recovery_sent, recovered, completed, expired |
recovery_sent | active, recovered, completed, expired |
recovered | completed, expired |
completed, expired | — (final) |
When a cart is recorded
A cart is recorded only when it has at least one product and an email address:
- Signed-in customers: their billing email, or their account email.
- Guests: only after they type an email in the checkout's billing email field, and only while Guest Carts is on. Works on both the classic and the block checkout.
On top of that, the guest's consent choice must allow it (never after "No thanks"; only after ticking the box in Checkbox mode), and no exclusion may apply. Nothing is recorded for anonymous visitors who never reach the email field.
How abandonment is detected
Every five minutes a background task looks at active carts whose last activity is older than Abandoned After (60 minutes by default, never less than 15). For each one it checks, in this order:
- Has this cart's own order been paid or put on hold? The cart becomes Completed.
- Has the same billing email placed a paid or on-hold order since this cart was created? The cart becomes Expired with the note "Customer bought in another order". The customer is never chased.
- Otherwise the cart becomes Abandoned.
How the reminder is sent
Right after detection, the sender picks abandoned carts that:
- were abandoned at least Send After minutes ago (0 by default),
- were abandoned within the last 7 days, so old carts don't get a surprise email,
- have had fewer than 3 sending attempts.
Up to 25 emails go out per run. Before each one, the plugin checks, in this order:
- Did the customer buy in another order? The cart is closed without an email.
- Is the address unsubscribed? The email is skipped and never retried.
- Did the address get a recovery email for another cart within One Email per Address Every hours (24 by default)? The email is skipped. This protects customers and your sender reputation.
Each cart gets at most one email from the Free plugin. With Pro, carts in a campaign get the campaign's sequence instead.
Recovery and revenue
When the shopper opens the link, their cart is rebuilt and they land on the checkout (see Recovery links). The cart is not marked Recovered on the click itself, because email security scanners open links too. It turns Recovered once the page the shopper lands on confirms the visit from their own browser, or when they place an order from the restored cart. You can also mark a cart as recovered yourself, for example when the customer finished the order by phone. When the resulting order is paid, or put on hold for offline payment, the cart is Completed and its order total counts as recovered revenue. If that order is later cancelled, refunded or fails, the revenue is taken off again.
The background schedule
| Task | Runs | What it does |
|---|---|---|
| Detect & send | Every 5 minutes | Marks quiet carts abandoned (100 per batch, up to 5 batches), then sends due emails (25 per run). With Pro it also runs campaigns and webhook deliveries. |
| Cleanup | Daily | Expires open carts with no activity for Expire Idle Carts After days (30 by default) and an expired link. Deletes records older than Delete Cart Records After. Completed carts are anonymized instead, so your revenue totals stay correct. |
DISABLE_WP_CRON is set, add a real cron job. See Troubleshooting.