{"id":316992,"date":"2026-06-11T14:28:44","date_gmt":"2026-06-11T14:28:44","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/cartwhisper\/"},"modified":"2026-06-11T14:00:15","modified_gmt":"2026-06-11T14:00:15","slug":"doolol-cart-recovery","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/doolol-cart-recovery\/","author":23503975,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"trunk","tested":"7.0","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Doolol Cart Recovery","header_author":"Armin Kazemi","header_description":"Multi-channel abandoned cart recovery for WooCommerce (Email + Web Push + WhatsApp). Smart, respectful, and conversion-focused.","assets_banners_color":"17192e","last_updated":"2026-06-11 14:00:15","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/doolol-cart-recovery","header_author_uri":"https:\/\/profiles.wordpress.org\/arminkbool","rating":0,"author_block_rating":0,"active_installs":0,"downloads":23,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":[],"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3568946,"resolution":"128x128","location":"assets","locale":"","width":1024,"height":1024},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3568946,"resolution":"256x256","location":"assets","locale":"","width":1024,"height":1024}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3568946,"resolution":"1544x500","location":"assets","locale":"","width":1824,"height":576},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3568946,"resolution":"772x250","location":"assets","locale":"","width":1824,"height":576}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":[],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Dashboard \u2014 Recovery stats: abandoned carts, recovered carts, recovery rate, revenue.","2":"Settings screen \u2014 Configure abandonment threshold, sequence delays, and all options."}},"plugin_section":[],"plugin_tags":[15962,11133,264,37677,286],"plugin_category":[45],"plugin_contributors":[266681],"plugin_business_model":[],"class_list":["post-316992","plugin","type-plugin","status-publish","hentry","plugin_tags-abandoned-cart","plugin_tags-cart-recovery","plugin_tags-email-marketing","plugin_tags-web-push","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-arminkbool","plugin_committers-arminkbool"],"banners":{"banner":"https:\/\/ps.w.org\/doolol-cart-recovery\/assets\/banner-772x250.png?rev=3568946","banner_2x":"https:\/\/ps.w.org\/doolol-cart-recovery\/assets\/banner-1544x500.png?rev=3568946","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/doolol-cart-recovery\/assets\/icon-128x128.png?rev=3568946","icon_2x":"https:\/\/ps.w.org\/doolol-cart-recovery\/assets\/icon-256x256.png?rev=3568946","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>7 out of 10 shoppers leave your store without buying.<\/strong> Doolol Cart Recovery quietly\nbrings them back.<\/p>\n\n<p>Doolol Cart Recovery tracks every WooCommerce cart \u2014 guest or logged-in \u2014 detects\nabandonment, and fires a respectful 3-step recovery sequence across <strong>email<\/strong>\nand <strong>web push notifications<\/strong>. A rule-based Smart Discount Engine issues\ncoupons only when they are actually likely to close the sale, never as a\nblanket give-away that trains customers to abandon on purpose.<\/p>\n\n<p>No third-party SaaS accounts. No monthly fees for the core features. No dark\npatterns. Just a lightweight plugin that works on your own infrastructure and\nputs recovered revenue back in your pocket.<\/p>\n\n\n\n<h4>Why store owners choose Doolol Cart Recovery<\/h4>\n\n<ul>\n<li><strong>Email + Web Push in one plugin<\/strong> \u2014 Reach customers through two high-intent\nchannels without paying for two separate SaaS subscriptions.<\/li>\n<li><strong>Guest recovery<\/strong> \u2014 Captures and recovers guest carts the moment a shopper\ntypes their email at checkout. No account required.<\/li>\n<li><strong>Smart Discount Engine<\/strong> \u2014 Issues percentage-off coupons only to first-time\ncustomers and high-value carts, preserving margin everywhere else.<\/li>\n<li><strong>No CDN, no tracking, no phone-home<\/strong> \u2014 All assets are self-hosted. The plugin\ncontains zero analytics code and makes no external network requests of its own.<\/li>\n<li><strong>GDPR-ready out of the box<\/strong> \u2014 Built-in 90-day data retention, one-click\nunsubscribe, and full WordPress privacy-tool integration.<\/li>\n<li><strong>Frequency cap + quiet hours<\/strong> \u2014 Respects your customers with a weekly send\nlimit and a configurable no-send window (default 10 pm \u2013 8 am).<\/li>\n<\/ul>\n\n<p><strong>Web Push channel<\/strong> <em>(Pro)<\/em><\/p>\n\n<p>Doolol Cart Recovery generates its own VAPID keys and delivers browser push\nnotifications directly from your server \u2014 no third-party push service, no\nSaaS middleman, no per-subscriber fees. Consent is collected via a minimal,\nnon-intrusive banner that appears only on WooCommerce-context pages.<\/p>\n\n<p><strong>Smart Discount Engine<\/strong> <em>(Pro)<\/em><\/p>\n\n<p>Rule-based coupon generation:\n1. VIP customers (configurable allowlist) are excluded \u2014 they should not be trained to abandon.\n2. First-time customers receive a larger discount (default 10 %).\n3. High-value carts receive a smaller discount (default 5 %).\n4. All other carts receive no discount \u2014 a recovery email alone is often enough.<\/p>\n\n<p>Coupons are restricted to the customer's email address, expire in 48 hours, and are\nsingle-use, so a leaked code does minimal damage.<\/p>\n\n<p><strong>Recovery sequence<\/strong><\/p>\n\n<p>Steps 1 and 2 are available on the Free plan. Steps 2 and 3, web push, custom\ndelays, quiet hours, the frequency cap, and the Smart Discount Engine require <strong>Pro<\/strong>.<\/p>\n\n\n\n\n  Step\n  Delay\n  Channel\n\n\n\n\n  1\n  1 hour\n  Email\n\n\n  2\n  24 hours\n  Email + Web Push\n\n\n  3\n  72 hours\n  Email (with coupon) + Web Push\n\n\n\n\n<h3>External services<\/h3>\n\n<p>This plugin sends Web Push notifications through the push messaging service of each visitor's own web browser. When a visitor opts in to push notifications, their browser provides a unique push endpoint URL hosted by their browser vendor's push service:<\/p>\n\n<ul>\n<li>Google Chrome \/ Android \u2192 Firebase Cloud Messaging (FCM), operated by Google LLC<\/li>\n<li>Mozilla Firefox \u2192 Mozilla Push Service, operated by Mozilla<\/li>\n<li>Apple Safari \u2192 Apple Push Notification service, operated by Apple Inc.<\/li>\n<\/ul>\n\n<p>Data sent: When a recovery push notification is dispatched, the plugin sends the encrypted notification payload (cart reminder title, body text, and recovery URL) to the push endpoint URL that the visitor's browser provided. No personal data is sent to these services beyond what is required to deliver the notification to the subscribed browser.<\/p>\n\n<p>When: Only when a visitor has explicitly opted in to push notifications, and only when their cart is abandoned and a recovery push is scheduled.<\/p>\n\n<p>These push services are operated by the respective browser vendors:\n* Google FCM: Terms https:\/\/firebase.google.com\/terms \u2014 Privacy https:\/\/firebase.google.com\/support\/privacy\n* Mozilla Push: Privacy https:\/\/www.mozilla.org\/privacy\/\n* Apple Push: Terms https:\/\/www.apple.com\/legal\/internet-services\/ \u2014 Privacy https:\/\/www.apple.com\/legal\/privacy\/<\/p>\n\n<!--section=installation-->\n<h4>From the WordPress admin<\/h4>\n\n<ol>\n<li>Go to <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Search for <strong>Doolol Cart Recovery<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<li>Visit <strong>Doolol Cart Recovery \u2192 Settings<\/strong> to review the defaults \u2014 the plugin works\nout of the box, but you may want to set a custom from-name and from-address for\nrecovery emails.<\/li>\n<\/ol>\n\n<h4>Manual installation<\/h4>\n\n<ol>\n<li>Unzip <code>cartwhisper.zip<\/code> and upload the <code>cartwhisper<\/code> folder to\n   \/wp-content\/plugins\/.<\/li>\n<li>Activate the plugin through <strong>Plugins \u2192 Installed Plugins<\/strong>.<\/li>\n<li>Visit <strong>Doolol Cart Recovery \u2192 Settings<\/strong>.<\/li>\n<\/ol>\n\n<h4>First-time setup<\/h4>\n\n<ul>\n<li>Four database tables are created automatically (<code>wp_cartwhisper_carts<\/code>,\n  wp_cartwhisper_events, <code>wp_cartwhisper_messages<\/code>,\n  wp_cartwhisper_subscribers).<\/li>\n<li>VAPID keys for Web Push are generated on activation.<\/li>\n<li>Visit <strong>Doolol Cart Recovery \u2192 Dashboard<\/strong> to confirm everything is running.<\/li>\n<li>For best email deliverability, pair Doolol Cart Recovery with an SMTP plugin such\nas WP Mail SMTP or FluentSMTP.<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20doolol%20cart%20recovery%20work%20for%20guest%20shoppers%3F\"><h3>Does Doolol Cart Recovery work for guest shoppers?<\/h3><\/dt>\n<dd><p>Yes \u2014 and this is one of Doolol Cart Recovery's strengths. Guest shoppers are tracked\nby a first-party cookie the moment they land on any WooCommerce page. Their\nemail address is captured when they start filling in the checkout form, so\nrecovery emails can be sent even if they never complete the purchase.<\/p><\/dd>\n<dt id=\"does%20web%20push%20work%20without%20a%20third-party%20service%3F\"><h3>Does Web Push work without a third-party service?<\/h3><\/dt>\n<dd><p>Yes. Doolol Cart Recovery uses the VAPID protocol with keys Doolol Cart Recovery\ngenerates and stores on your own server. Push notifications are delivered\ndirectly from WordPress to the browser via the browser vendor's push relay.\nNo SaaS push service, no per-subscriber pricing.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20store%3F\"><h3>Will this slow down my store?<\/h3><\/dt>\n<dd><p>Doolol Cart Recovery is lightweight by design. It hooks into standard WooCommerce cart\nevents (which fire whether or not any recovery plugin is installed) and writes\nto its own tables rather than post meta. The abandonment-detection cron and\nsequence-dispatch cron run in the background and do not block page loads.<\/p><\/dd>\n<dt id=\"how%20are%20recovery%20emails%20sent%3F\"><h3>How are recovery emails sent?<\/h3><\/dt>\n<dd><p>Through WordPress's built-in <code>wp_mail()<\/code>. This means Doolol Cart Recovery works with\nany transactional email plugin or service you already have configured \u2014\nMailgun, SendGrid, Amazon SES, or a dedicated SMTP relay.<\/p>\n\n<p>For production use we recommend pairing Doolol Cart Recovery with an SMTP plugin to\nensure reliable delivery and avoid the spam folder.<\/p><\/dd>\n<dt id=\"can%20i%20customise%20the%20email%20templates%3F\"><h3>Can I customise the email templates?<\/h3><\/dt>\n<dd><p>The template files live in <code>wp-content\/plugins\/cartwhisper\/execution\/channels\/templates\/<\/code>.\nCopy the file you want to change into <code>wp-content\/themes\/your-theme\/cartwhisper\/templates\/<\/code>\nand WordPress will use your copy instead (child-theme-safe). A visual template\neditor is planned for a future Pro release.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20woocommerce%20high-performance%20order%20storage%20%28hpos%29%3F\"><h3>Does this work with WooCommerce High-Performance Order Storage (HPOS)?<\/h3><\/dt>\n<dd><p>Yes. Doolol Cart Recovery explicitly declares compatibility with WooCommerce's\nHPOS feature. It does not query the <code>wp_posts<\/code> table for order data.<\/p><\/dd>\n<dt id=\"is%20this%20plugin%20gdpr-compliant%3F\"><h3>Is this plugin GDPR-compliant?<\/h3><\/dt>\n<dd><p>Doolol Cart Recovery was built with GDPR in mind from day one:<\/p>\n\n<ul>\n<li>Personal data (email, name, cart contents) is deleted automatically after\n90 days of inactivity.<\/li>\n<li>Every recovery email contains a one-click unsubscribe link; opting out\nblacklists the address permanently.<\/li>\n<li>The plugin registers a personal-data exporter and eraser with WordPress's\nbuilt-in privacy tools (Tools \u2192 Export Personal Data \/ Erase Personal Data).<\/li>\n<li>No data ever leaves your server \u2014 there are no analytics calls, no telemetry,\nand no third-party SaaS dependencies.<\/li>\n<\/ul>\n\n<p>Unsubscribed \/ erased addresses are stored only as hashed values and are\npreserved until you decide to clean them up. If you want Doolol Cart Recovery to remove\nall its tables and options on deletion, tick the <strong>Delete all Doolol Cart Recovery data\non uninstall<\/strong> checkbox on the Settings page.<\/p><\/dd>\n<dt id=\"does%20doolol%20cart%20recovery%20track%20analytics%20or%20phone%20home%3F\"><h3>Does Doolol Cart Recovery track analytics or phone home?<\/h3><\/dt>\n<dd><p>No. Doolol Cart Recovery contains no analytics code, no telemetry, and no phone-home\nrequests of any kind. All data stays on your server. Freemius is included for\noptional licensing of the Pro plan; it is only activated if you choose to\nconnect your site through the upgrade flow.<\/p><\/dd>\n<dt id=\"why%20are%20some%20carts%20not%20getting%20emails%3F\"><h3>Why are some carts not getting emails?<\/h3><\/dt>\n<dd><p>Check the following:<\/p>\n\n<ol>\n<li><strong>Cart value<\/strong> \u2014 The default minimum cart value is $5. Carts below this are\nsilently skipped (configurable in Settings).<\/li>\n<li><strong>Unsubscribe<\/strong> \u2014 The customer may have previously unsubscribed or been\nerased via the privacy tools.<\/li>\n<li><strong>Quiet hours<\/strong> \u2014 The sequence-dispatch cron honours the quiet-hours window\nand will defer sends until the window ends.<\/li>\n<li><strong>Frequency cap<\/strong> \u2014 If the customer has received 3 or more sequence steps in\nthe past 7 days, further sends are paused.<\/li>\n<li><strong>WP-Cron<\/strong> \u2014 On high-traffic sites, WordPress pseudo-cron can be unreliable.\nFor production, set up a real server cron job or use WP-Crontrol to verify\ncron events are firing.<\/li>\n<\/ol><\/dd>\n<dt id=\"does%20the%20plugin%20support%20real%20cron%20jobs%3F\"><h3>Does the plugin support real cron jobs?<\/h3><\/dt>\n<dd><p>Yes \u2014 the plugin registers its own cron intervals and works with any cron\ndriver. For best reliability on production sites, disable WordPress pseudo-cron\nby adding <code>define( 'DISABLE_WP_CRON', true );<\/code> to <code>wp-config.php<\/code>, then add a\nreal server cron job (<code>*\/5 * * * * curl https:\/\/yourstore.com\/wp-cron.php<\/code>)\nor install the <strong>Action Scheduler<\/strong> library (bundled with WooCommerce) \u2014 it\nprovides a robust job queue that Doolol Cart Recovery will support in a future release.<\/p><\/dd>\n<dt id=\"what%20versions%20of%20woocommerce%20and%20wordpress%20are%20supported%3F\"><h3>What versions of WooCommerce and WordPress are supported?<\/h3><\/dt>\n<dd><p>Doolol Cart Recovery requires WordPress 6.0+ and WooCommerce 8.0+. It is tested up\nto WordPress 6.7 and WooCommerce 9.5. PHP 7.4 is the minimum; PHP 8.2 is\nrecommended.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added Freemius SDK integration for Pro licensing.<\/li>\n<li>Added Web Push channel (Pro): VAPID key generation, service worker, consent prompt, PushSender.<\/li>\n<li>Added Smart Discount Engine (Pro): rule-based coupon generation for step 3.<\/li>\n<li>Added sequence scheduler with configurable delays, quiet hours, and frequency cap.<\/li>\n<li>Added admin dashboard with recovery-rate trend chart (pure Canvas, no CDN).<\/li>\n<li>Added Settings page with 5 sections: General, Email, Web Push, Sequences, Advanced.<\/li>\n<li>Added system-status panel and send-test-email feature to Settings.<\/li>\n<li>Added GDPR compliance: 90-day data retention cron, WP privacy exporter\/eraser, unsubscribe blacklist.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release of Doolol Cart Recovery.<\/li>\n<\/ul>","raw_excerpt":"Recover abandoned WooCommerce carts with email + web push. Smart discounts, no dark patterns, GDPR-ready. Works for guests too.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/316992","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=316992"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/arminkbool"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=316992"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=316992"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=316992"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=316992"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=316992"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=316992"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}