Oli Abandoned Cart Recovery Wordpress Plugin - Rating, Reviews, Demo & Download
Plugin Description
Oli Abandoned Cart Recovery asks for the customer’s consent on the checkout page and, once the consent box is ticked, saves the email and the cart — even for guests who never place an order — and sends a sequence of reminder emails when the cart is abandoned. Consent is on by default for guests and logged-in customers (Quebec Law 25, GDPR). Every email has a secure recovery link that refills the cart, pre-fills the email and sends the customer straight to checkout. Reminders stop automatically as soon as an order is placed.
It works with the classic checkout and the block checkout, is compatible with HPOS (High-Performance Order Storage), and does all the heavy work in the background with Action Scheduler (WP-Cron fallback). Nothing runs on the front end except one tiny script on the checkout page.
Capture
- Email captured on the fly, with consent — once the consent box is ticked, the email is sent on blur/change with a debounce, a nonce and server-side
is_emailvalidation - Classic and block checkout — one delegated listener works with both, through the lightweight
wc-ajaxendpoint - Phone, first and last name captured with the email
- Guests and registered customers — logged-in carts are updated every time the cart changes, once the customer has consented
- Consent first (default) — with the Require consent switch on (default), nothing is saved for guests or logged-in customers (no email, phone or cart) until they tick the consent checkbox under the email field (classic and block checkout). A logged-in customer’s consent is remembered in their account and can be withdrawn by unticking the box. The switch can be turned off by the site owner, under their own responsibility: a permanent warning (Law 25, GDPR) is then shown in the admin
- Consent text with links — edited per language with a small editor (links, bold, italic, saved with
wp_kses), for example to link your privacy policy. Left empty, the default text is translated in each visitor’s language - Abuse protection — rate limits on the capture endpoint (per IP and per session,
oli_acr_capture_rate_limitsfilter) and a honeypot field - Cache-proof — checkout pages send no-cache headers and
DONOTCACHEPAGE; an expired nonce from a cached page is refreshed automatically - Tracked roles — all users or only the roles you choose
- Cart snapshot — products, quantities, variations, total, currency and language, linked to the WooCommerce session and a secure token
Multilingual
- Templates per language — each template has its own texts (name, subject, heading, content, button) for every active language, edited in language tabs; delay, coupon and status are shared
- Consent text per language
- Works with TranslatePress, Polylang (with Polylang for WooCommerce, or the short snippet in the FAQ), WPML and Weglot (and a single-language site); other plugins can be added with the
oli_acr_lang_adaptersfilter - Sent in the cart’s language — the language of the checkout page is saved with the cart; recovery and unsubscribe links point to the URL of that language, and the recovery link opens the checkout page of that language
- Adjustable fallback language for carts in an unknown or deactivated language
- WPML String Translation and Polylang strings — texts of the fallback language are registered, so they can also be translated there
Reminders
- Sent in the customer’s language — each reminder is sent in the language saved with the cart (
switch_to_locale). Default templates stay translatable until you edit them - Several email templates, each with its own delay, subject, heading, reply-to address, content, recovery button label and active/inactive status
- Sent in sequence — reminder #1, then #2, and so on, counted from the moment the cart was abandoned
- Placeholders —
{first_name},{last_name},{full_name},{email},{cart_items},{cart_total},{recovery_link},{recovery_button},{coupon},{coupon_code},{unsubscribe_link},{site_name},{site_url},{order_number},{order_date} - WooCommerce email look — messages are wrapped in the WooCommerce email template (colors, header, footer), with a plain-text part (multipart/alternative)
- Retries after a failed send — a failed reminder gets the Send failed status and is retried after 5 minutes, 30 minutes and 2 hours (
oli_acr_retry_delaysfilter); the cause is shown in the admin and logged in WooCommerce > Status > Logs, even withoutWP_DEBUG - Unique coupons — optional single-use coupon per reminder (prefix, percentage or fixed amount, validity), restricted to the customer’s email and applied automatically when the recovery link is clicked; created only when the email shows it (
{coupon}or{coupon_code}) - Coupon clean-up — used and expired generated coupons are moved to the trash daily
- Pending orders — reminders for unpaid orders with their own delay and templates, with a secure “pay for order” link
- Send a test — send any template to the address of your choice
- Send now — send the next reminder of a cart or pending order manually
- Admin notification — a WooCommerce email is sent to the admin when a cart or pending order is recovered
Stop, unsubscribe and privacy
- Automatic stop — as soon as an order is placed with the same session or email, the cart is marked Recovered and linked to the order
- Unsubscribe link in every email (with
List-UnsubscribeandList-Unsubscribe-Postone-click headers, RFC 8058) and an exclusion list you can edit - No email ever sent to unsubscribed addresses
- Personal data exporter and eraser for the WordPress privacy tools
- Suggested privacy policy text
- Automatic clean-up — old unrecovered carts are deleted, old reminded pending orders can be cancelled, and all data is kept only for the retention period you choose
Dashboard and reports
- Abandoned carts list (WP_List_Table) with status filters, search, bulk delete and row actions
- Pending orders, Recovered orders and Email log (sent, clicked, recovered, coupon)
- Reports — abandoned carts, emails sent, clicks, recovered carts and pending orders, recovery rate and recovered revenue, by period (7, 30, 90 days, 12 months, all time), by day and by template
- Shop manager access — optional, through the dedicated
oli_acr_managecapability
Lightweight by design
- Two custom tables with indexes, created with
dbDeltaand a schema version - One indexed
UPDATEmarks carts as abandoned; reminders are processed in batches (oli_acr_batch_sizefilter), under an atomic lock with a time budget so two runs never send the same reminder - No work on the front end besides the checkout script (about 3 KB, no jQuery); settings are autoloaded, so no extra query on other pages
- Works with HPOS and with the legacy order storage
- No external service, no tracking pixel
Privacy
The plugin stores, in the store’s own database: the email, phone, first and last name typed on the checkout page, the cart content, and the reminder email history. No data is sent to a third party. A suggested text is added to Settings > Privacy, and the data can be exported or erased with the WordPress privacy tools.
Screenshots
Dashboard: recovery stats (abandoned carts, emails sent, clicks, recovery rate, recovered revenue), report by day and report by template
Abandoned carts list with status filters (active, abandoned, reminded, recovered, unsubscribed, send failed), including the error of a failed send
Email template editor: language tabs, placeholders, unique coupon and “Send a test”
Settings: the “Require consent” switch turned off, with the Quebec Law 25 / GDPR warning (consent is on by default)
Cart reminder email received by the customer, with the cart items and the recovery button
