PHPackages                             setono/sylius-abandoned-cart-plugin - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. setono/sylius-abandoned-cart-plugin

ActiveSylius-plugin[Utility &amp; Helpers](/categories/utility)

setono/sylius-abandoned-cart-plugin
===================================

Reengage customers who abandoned their cart in Sylius

v2.0.0(3mo ago)623.6k↓58.3%5[4 issues](https://github.com/Setono/SyliusAbandonedCartPlugin/issues)MITPHPPHP &gt;=8.1CI passing

Since Sep 20Pushed 2w ago1 watchersCompare

[ Source](https://github.com/Setono/SyliusAbandonedCartPlugin)[ Packagist](https://packagist.org/packages/setono/sylius-abandoned-cart-plugin)[ GitHub Sponsors](https://github.com/Setono)[ RSS](/packages/setono-sylius-abandoned-cart-plugin/feed)WikiDiscussions 3.x Synced 4d ago

READMEChangelog (10)Dependencies (85)Versions (19)Used By (0)

Abandoned cart plugin for Sylius
================================

[](#abandoned-cart-plugin-for-sylius)

[![Latest Stable Version](https://camo.githubusercontent.com/1a21b4a9f3d337138c1ff6fdd7241526e28e7de53347e846912ca1b780ed6c6c/687474703a2f2f706f7365722e707567782e6f72672f7365746f6e6f2f73796c6975732d6162616e646f6e65642d636172742d706c7567696e2f76)](https://packagist.org/packages/setono/sylius-abandoned-cart-plugin)[![Total Downloads](https://camo.githubusercontent.com/b6799ea7bf91f3c358c6aff7c921d5358fe4369ffc4b7520a6bf08ff44fdca70/687474703a2f2f706f7365722e707567782e6f72672f7365746f6e6f2f73796c6975732d6162616e646f6e65642d636172742d706c7567696e2f646f776e6c6f616473)](https://packagist.org/packages/setono/sylius-abandoned-cart-plugin)[![License](https://camo.githubusercontent.com/08ce4627ba96b10b0c810028d6a6bb6bd8645decab201005e4b08d8867c9aac6/687474703a2f2f706f7365722e707567782e6f72672f7365746f6e6f2f73796c6975732d6162616e646f6e65642d636172742d706c7567696e2f6c6963656e7365)](https://packagist.org/packages/setono/sylius-abandoned-cart-plugin)[![PHP Version Require](https://camo.githubusercontent.com/e8d498a0bfa32bca5af79500a0d212fabf1e8681ec158867d8e525066cdcd01a/687474703a2f2f706f7365722e707567782e6f72672f7365746f6e6f2f73796c6975732d6162616e646f6e65642d636172742d706c7567696e2f726571756972652f706870)](https://packagist.org/packages/setono/sylius-abandoned-cart-plugin)[![build](https://github.com/Setono/SyliusAbandonedCartPlugin/actions/workflows/build.yaml/badge.svg)](https://github.com/Setono/SyliusAbandonedCartPlugin/actions/workflows/build.yaml)[![codecov](https://camo.githubusercontent.com/dcbe832c867634535666c1fecba0754e3d90618b45248cf21c3c6263abd0533f/68747470733a2f2f636f6465636f762e696f2f67682f5365746f6e6f2f53796c6975734162616e646f6e656443617274506c7567696e2f67726170682f62616467652e7376673f746f6b656e3d723742686d376159436c)](https://codecov.io/gh/Setono/SyliusAbandonedCartPlugin)[![Mutation testing badge](https://camo.githubusercontent.com/c8c4080de6e02af2d7e1ba42866d61643c2d8281129b5a5d2bed2d01763ee584/68747470733a2f2f696d672e736869656c64732e696f2f656e64706f696e743f7374796c653d666c61742675726c3d687474707325334125324625324662616467652d6170692e737472796b65722d6d757461746f722e696f2532466769746875622e636f6d2532465365746f6e6f25324653796c6975734162616e646f6e656443617274506c7567696e253246332e78)](https://dashboard.stryker-mutator.io/reports/github.com/Setono/SyliusAbandonedCartPlugin/3.x)

Recover lost sales on autopilot. This plugin spots shopping carts your customers leave behind, then emails them a friendly reminder with a **one-click link back to their cart** — and a compliant **unsubscribe link**. Everything is tracked in the admin panel so you can see exactly which carts were notified, recovered, or opted out.

Features
--------

[](#features)

- 🛒 **Automatic idle-cart detection** — finds carts that have been sitting untouched for a configurable amount of time.
- ✉️ **Re-engagement emails** — a clean, localized email with a recovery call-to-action and an unsubscribe link.
- 🔁 **One-click cart recovery** — the recovery link restores the customer's cart and records the click for engagement tracking.
- 🚫 **Built-in opt-out &amp; eligibility rules** — never email customers who unsubscribed, and optionally target newsletter subscribers only.
- 📊 **Admin overview** — a grid under *Marketing → Abandoned cart* listing every notification with its state, channel, customer and revenue.
- 🧩 **Extensible by design** — add your own eligibility rules, tweak the idle-cart query, or override the email template.
- 🌍 **15 locales out of the box** — `en`, `da`, `de`, `es`, `fi`, `fr`, `hu`, `it`, `nl`, `no`, `pl`, `pt`, `ro`, `sv`, `uk`.

How it works
------------

[](#how-it-works)

The plugin runs as a small pipeline, driven by two commands you schedule on a cron:

1. **Detect** — `create-notifications` finds carts that have been idle for `idle_threshold` minutes and creates a `Notification` for each (initial state: `pending`).
2. **Process** — `process-notifications` runs every pending notification through the eligibility checks, sends the email, and transitions it to `sent` (or `ineligible` if a check fails).
3. **Recover** — the email contains a **recovery link** (restores the cart and tracks the click) and an **unsubscribe link** (records the opt-out so the customer is never emailed again).

Each notification moves through a state machine:

```
pending ──► processing ──► sent
                       └──► ineligible
(any state) ──► failed

```

Requirements
------------

[](#requirements)

PackageVersionPHP8.2+Sylius^2.0Symfony6.4 or 7.4> **Using Sylius 1.x?** This branch (`3.x`) targets Sylius 2. For Sylius 1.x support, use the [`2.x`](https://github.com/Setono/SyliusAbandonedCartPlugin/tree/2.x) branch.

Installation
------------

[](#installation)

### 1. Require the plugin

[](#1-require-the-plugin)

```
composer require setono/sylius-abandoned-cart-plugin
```

### 2. Register the bundle

[](#2-register-the-bundle)

Add the plugin to `config/bundles.php` **before** `SyliusGridBundle` — otherwise you'll get a `non-existent parameter "setono_sylius_abandoned_cart.model.notification.class"` error, because the grid configuration references parameters the plugin registers.

```
