Skip to content

Configuration

Recover ships with sensible defaults, so configuration is optional. Everything lives on one screen, WooCommerce > Recover, stored as a single array in the recover_settings option. The fields fall into three sections: General, Timing and Recovery email.

  • Enable cart recovery (enabled, on by default), the master switch. When off, no carts are snapshotted, the cron worker exits early, and the carts screen shows a warning notice. Existing data is kept.
  • Capture guest carts (capture_guests, on by default), record carts and emails from visitors who are not logged in. When off, the checkout capture script is not enqueued and guest snapshots are skipped; only logged-in customers are tracked.
  • Require consent (require_consent, on by default), only store a guest email after they tick a consent checkbox at checkout. With consent off, a guest email is captured without the tick. Recommended on for GDPR.
  • Consent checkbox label (consent_label), the wording shown next to the consent checkbox the capture script injects at checkout. Applies only when Require consent is on. Blank uses the default: “Email me a link to recover my cart if I do not complete my order.”

Logged-in customers’ emails are read from their account automatically, so Require consent and the consent label apply to the guest checkout field only.

  • Mark abandoned after (minutes) (abandon_after, default 60, minimum 5), minutes of inactivity before a pending cart is flagged abandoned. Values below 5 are clamped to 5. Shorter windows reach shoppers sooner but risk emailing someone still browsing.
  • Email delay (minutes) (email_delay, default 30, minimum 0), minutes to wait after a cart becomes abandoned before the first recovery email goes out, and between the ones after it. Set to 0 to email as soon as a cart is abandoned.
  • Number of reminders (email_count, default 1, clamped to 1-5), how many recovery emails one shopper receives for the same cart. Anything below 1 or above 5 is clamped on save and again on read, so a hand-edited option cannot push the sequence past five.

Because the worker runs hourly, all three values are effective in roughly one-hour granularity, a 5-minute window does not mean a 5-minute email; the next scheduled run picks it up.

How the reminder count and the email delay interact

Section titled “How the reminder count and the email delay interact”

There is no separate interval for the follow-ups. Email delay spaces the whole sequence:

  • The first email is due email_delay minutes after the cart was marked abandoned.
  • Every later email is due email_delay minutes after the previous one was sent, measured from the time the last email actually went out, not from the abandonment.

So email_delay 60 with email_count 3 is one reminder an hour after abandonment, a second an hour after that, and a third an hour later again, each one landing on the next hourly cron run. Raising the count without raising the delay makes the sequence denser, not longer.

A cart stops receiving reminders as soon as it is recovered, and the send is gated on a per-row counter, so a re-run or an overlapping run never sends the same step twice.

email_count defaults to 1, and an existing installation has no stored value for it, so an update does not turn a shop into a sequence sender behind its back. A store that has been running Recover keeps sending exactly one reminder per cart until someone raises the number on this screen.

Each field is plain text. Leave any field blank to use the built-in default, which is shown as the field’s placeholder so the zero-config wording is visible without saving.

  • Subject (email_subject), default “You left something in your cart”.
  • Heading (email_heading), the large heading at the top of the email body. Default “Still thinking it over?”.
  • Body text (email_body), the message above the restore button. Default “We saved your cart for you. Click the button below to pick up right where you left off.”.
  • Button label (email_button), text on the restore button. Default “Complete my order”.

The email is sent as HTML through wp_mail. The template is bundled with the plugin and is not theme-overridable, there is no yourtheme/recover/ lookup. To change the markup or styling, use the recover/email/args filter (below) or override the message text it builds. The accent colour is a warm amber set inline for mail-client safety.

recover/email/args runs just before wp_mail, letting add-ons rewrite the recipient, subject, message HTML or headers, for example to inject a recovery coupon:

add_filter( 'recover/email/args', function ( array $args, $cart ) {
// $args = ['to' => ..., 'subject' => ..., 'message' => ..., 'headers' => [...]]
// $cart is a Recover\Model\AbandonedCart (read-only: email, token, cartTotal, itemCount, currency...).
$args['subject'] = sprintf( 'Your cart is waiting, here is 10%% off (%d items)', $cart->itemCount );
return $args;
}, 10, 2 );

Two more filters shape the sequence itself, and both take the merchant’s own setting as their default, so an add-on that is not installed changes nothing:

  • recover/max_emails receives email_count and returns how many emails a cart may receive. Recover Pro uses it to hand the count to its own list of steps.
  • recover/email_step_delay receives email_delay, the cart and the zero-based step index, and returns the minutes to wait before that step. Return a different number per step to space the follow-ups differently from the first email.

Two actions fire alongside them: recover/email_sent (the cart and the step index, after wp_mail accepted the message) and recover/cart_recovered (the cart, when it is marked recovered). recover/email/template_args filters the template variables before the HTML is built.

  • Snapshots are taken on woocommerce_add_to_cart, woocommerce_cart_updated and woocommerce_cart_item_removed; you cannot disable individual triggers.
  • A cart is marked recovered the moment an order is placed for that session/user, and also when the restore link is clicked, even if the order is not then completed, because the shopper returned via your link.
  • The reminders in a sequence all use the same subject, heading, body and button. There is no per-step copy in the free edition, and no separate interval for the follow-ups.
  • The sequence is capped at 5 emails per cart. An add-on can raise that through recover/max_emails (below), but the screen does not go past five.

Recovery emails are sent on a WordPress cron schedule (the recover_process_carts hook, hourly). Each run first marks carts inactive past your window as abandoned, then emails a recovery link to any abandoned cart that is due, has an email, has consent, and has not yet had all of its reminders. The worker is idempotent, a counter on the row gates the send, so a re-run never double-sends a step.

  • Settings: the recover_settings option (array). Schema version: the recover_db_version option.
  • Carts: a single custom table, {prefix}_recover_carts, in your own database.

Nothing is sent to any external service. See How it works for the full lifecycle and the privacy model.