Description
Recover captures WooCommerce carts that shoppers leave behind and emails them a secure, one-click link that puts every item straight back into their cart so they can finish checking out. It runs entirely on your own site: no third-party service, no data leaves your store.
Because everything happens on your own server, you can read exactly what it does. The full source lives at github.com/wppoland/plogins-recover, which is also where to file a bug or request a feature.
How it works
- As soon as a shopper has items in the cart, Recover saves a private snapshot of that cart.
- The customer email is captured early, automatically for logged-in customers, and (with consent) from the checkout email field for guests.
- If checkout is not completed within a window you choose, the cart is marked abandoned.
- On the next scheduled run, Recover emails a recovery message containing a secure, tokenised restore link.
- One click on that link repopulates the cart and sends the shopper back to checkout. Recovered carts are tracked separately so you can see your recovery rate.
A few things worth knowing
Emails go out through your own WordPress mailer (wp_mail), and cart data lives in a single custom table ({prefix}_recover_carts) in your database. Nothing is sent to an external service.
Guest email capture only happens after the shopper ticks a consent checkbox, and you can edit the wording or turn the requirement off. Restore links carry an unguessable 64-character random token and nothing else: no customer id, no email in the URL. From the carts screen you can wipe every stored cart for a single email address in one click.
On the implementation side, all output is escaped and all input sanitised, every admin form and AJAX request is nonce-checked, and the admin pages need the manage_woocommerce capability. Early email capture uses a small vanilla-JavaScript snippet (no jQuery) loaded in the footer; the recovery worker runs on WordPress cron and is idempotent, so a re-run never sends a second email for the same cart. Deleting the plugin drops its table, removes its two options, and clears the scheduled task.
Features
- Automatic cart snapshots whenever the cart changes
- Early email capture for logged-in customers and (consent-gated) guests
- Configurable abandonment window and email delay
- Secure, tokenised one-click restore link that repopulates the cart
- Recovery email sent on a WordPress cron schedule via
wp_mail - Abandoned / recovered / pending cart list with a recovery-rate summary
- Customisable email subject, heading, body and button text
- GDPR-friendly consent checkbox and one-click per-email data wipe
- Compatible with WooCommerce HPOS (Custom Order Tables) and Cart/Checkout Blocks
Recover PRO
The free edition sends the whole recovery sequence, with no cap on what it will do. Recover PRO is for shops that want to tune it and measure it, and adds:
- Per-step sequence control – a separate delay and its own copy for each step, plus a coupon on the steps you pick
- Discount codes – a unique, expiring coupon in the recovery email, to give a hesitant shopper a reason to finish
- Conversion analytics – recovered revenue, recovery rate by step, and what the coupon emails actually did
Everything in the free edition stays free and open. Recover PRO starts at 29 EUR per year, billed in EUR.
Compare editions and pricing: plogins.com/plogins-recover-pro/pricing/
External Services
Recover does not connect to any external services. Recovery emails are sent through your own site’s WordPress mailer (wp_mail), and all cart data stays in your WordPress database.
Translations
Plogins Recover is fully translatable and ships the plogins-recover.pot template. Translations are delivered by WordPress.org language packs from translate.wordpress.org, which is where Polish, German and Spanish are being contributed; the package itself carries no compiled translation files.
Screenshots


Installation
- Install and activate WooCommerce (8.0 or later).
- Install Recover from the WordPress plugin directory, or upload the
plogins-recoverfolder to/wp-content/plugins/. - Activate the plugin through the Plugins screen.
- Visit WooCommerce > Recover to set your timing and customise the email; sensible defaults work out of the box.
- Abandoned carts and your recovery rate appear under WooCommerce > Recover Carts.
FAQ
-
Documentation and links
-
- Documentation: plogins.com/plogins-recover/docs/
- Plugin page: plogins.com/plogins-recover/
- Source code: github.com/wppoland/plogins-recover
- Bug reports and feature requests: github.com/wppoland/plogins-recover/issues
-
Is Recover free?
-
Yes. Recover is free and licensed under the GPL.
-
Does Recover require WooCommerce?
-
Yes. Recover is a WooCommerce extension and requires WooCommerce 8.0 or later. It shows an admin notice and stays inactive if WooCommerce is missing or out of date.
-
How is the recovery email sent?
-
On a WordPress cron schedule (hourly by default). Each run marks carts that have been inactive past your window as abandoned, then emails a recovery link to any abandoned cart that is due, using your own site mailer (
wp_mail). The worker is idempotent, so it never double-sends, so each cart receives a single recovery email. -
Is the restore link safe?
-
Yes. Each cart has a 64-character cryptographically random token. The restore link contains only that token: no customer id, no email, nothing personal. Without the exact token a cart cannot be restored, so there is no enumeration or IDOR risk.
-
Does this comply with GDPR / consent requirements?
-
Guest email capture only happens after the shopper ticks a consent checkbox (you can edit the wording, and consent can be required or not). Cart data is stored only in your own database and never sent to any third party. From WooCommerce > Recover Carts you can erase all stored cart data for any email address in one click. You remain responsible for your store’s privacy policy.
-
Where is cart data stored?
-
In a custom
{prefix}_recover_cartstable in your WordPress database. Nothing is sent anywhere else. -
How do I remove all plugin data?
-
Deleting the plugin from the Plugins screen runs the uninstall routine, which drops the
{prefix}_recover_cartstable, removes therecover_settingsandrecover_db_versionoptions, and clears the scheduled recovery task. -
Does this plugin work on WordPress Multisite?
-
Yes. This plugin is compatible with WordPress Multisite. Network activate it or activate it on individual sites; each site keeps its own settings and data.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Plogins Recover – Abandoned Cart for WooCommerce” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Plogins Recover – Abandoned Cart for WooCommerce” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.0.16
- Changed: the listing now says a paid edition exists and what it adds. It never did, so anyone reading the WordPress.org page had no way of knowing there was one.
1.0.15
- Fixed: the PRO upgrade promo kept selling to people who had already bought the paid edition. Only the banner could be dismissed, so the sidebar promo and the locked feature cards followed a paying customer around for good. The promo now checks whether the paid edition is active and steps aside when it is.
- Fixed: the link under the timing fields had an arrow glyph inside the translatable string, so every translator had to carry the arrow and any locale that dropped it changed the layout. The label is plain text now.
- Fixed: the German translation of the subject-line help carried two zero-width spaces, invisible in the editor and passed through to the screen.
- Changed: Polish, German and Spanish are complete again at 93 of 93 strings. Twenty strings added since the last refresh, among them the whole cart search and the reminder plan, had no translation at all.
1.0.14
- Fixed: deleting the plugin left the per-user “dismiss” flag from the PRO notice in the database. Uninstall now removes it for every user, not just the one who dismissed it.
1.0.13
- Changed: Number of reminders now shows the plan it makes. That field and Email delay (minutes) only mean anything together, and neither could show it alone, so the sequence is now listed under the field, counted from the moment a cart is marked abandoned. Steps ease in and out as you change the count, so you watch the campaign grow or shrink instead of having to save to find out. The list is rendered from the saved settings, so it is correct with JavaScript switched off too.
- Changed: the field now carries the upper bound it always had. Anything above 5 was silently clamped down to 5 on save; the input says 1 to 5 now, so the browser stops you before the save does.
- Fixed: the muted grey used across this screen measured 4.24:1 against the wp-admin background, under the 4.5:1 WCAG AA asks for text. That covered the next-run line, the card labels and the promo copy. It is 5.38:1 now.
- Changed: every text, number and multiline field on the settings screen ties its help text to the input with
aria-describedby, so a screen reader reads the explanation with the field rather than leaving it to be found on its own.
1.0.12
- New: Number of reminders, from 1 to 5, under Timing. The sequence engine was always in the plugin, but the count was pinned to 1 in code with no way for a merchant to change it. That made it a built-in feature the plugin refused to run, which the WordPress.org guidelines do not allow, so it is a setting now. Existing shops keep sending one reminder until they raise it.
- The reminders are spaced by the existing Email delay, and every one of them uses the same subject and body. Different copy per step, and a coupon on a chosen step, are what the paid edition adds on top.
- Fixed: exporting personal data crashed for any shopper who had an abandoned cart. The export cast a date object straight to a string, which is a fatal in PHP, so the one request a shop is obliged to be able to answer was the one that failed. The date is formatted now.
1.0.11
- The translation template was regenerated. It still named an older version of the plugin and pointed at source lines that had since moved, which is what translation tools read to show a string in context.
1.0.10
- Renamed to Plogins Recover – Abandoned Cart for WooCommerce so the name leads with the brand rather than a generic word, which is what the WordPress.org plugin review team asks for. The plugin slug is unchanged.
1.0.9
- Removed the “Tested up to” header from the main PHP file. It belongs in readme.txt only, where it is already declared; present in both, the header can override the readme and show a compatibility version that was never intended.
1.0.8
- Tested against WordPress 7.1. Verified by activating this build on a clean 7.1 install with WooCommerce 11.1, not by editing the header.
1.0.7
- Fixed the PRO promo on the settings screen quoting a price in PLN. PRO is priced and charged in EUR, so an admin on a Polish site was shown a zloty amount and then billed in euro, and the zloty figure was a fixed conversion that drifted from the real charge as the rate moved. The promo now shows the euro price that is actually taken.
1.0.6
- Logged-in customers now receive recovery emails again. With “Require consent” on, their carts were saved but never emailed, even though the consent checkbox is only ever shown to guests.
1.0.4
- Translations: completed Polish, German and Spanish for the PRO upgrade panel.
1.0.3
- Accessibility improvements to the admin and storefront markup.
- Fixed low-contrast admin headings under an OS dark-mode preference.
1.0.2
- Added bundled Polish, German and Spanish translations for the plugin interface.
1.0.1
- First stable release.
0.1.3
- Renamed to Plogins Recover for WooCommerce for a more distinctive plugin name.
0.1.2
recover/email_sentaction after a recovery email is accepted by wp_mail.recover/cart_recoveredaction when a cart is marked recovered.CartRepository::findById()for cart lookup by primary key.
0.1.1
- Multi-email recovery sequences:
recover/max_emails,recover/email_step_delay,
recover/email/template_args, and a third$stepargument onrecover/email/args. - Cron worker increments
emails_sentand schedules follow-ups fromlast_email_at.
0.1.0
- Initial release.
