monorepo/native/wordpress/maple-carts-wp
2025-12-12 18:30:26 -05:00
..
assets WP maple cart and page subtitle plugin upload 2025-12-12 18:30:26 -05:00
includes WP maple cart and page subtitle plugin upload 2025-12-12 18:30:26 -05:00
index.php WP maple cart and page subtitle plugin upload 2025-12-12 18:30:26 -05:00
LICENSE WP maple cart and page subtitle plugin upload 2025-12-12 18:30:26 -05:00
maple-carts.php WP maple cart and page subtitle plugin upload 2025-12-12 18:30:26 -05:00
README.md WP maple cart and page subtitle plugin upload 2025-12-12 18:30:26 -05:00
uninstall.php WP maple cart and page subtitle plugin upload 2025-12-12 18:30:26 -05:00

Maple Carts

A lightweight abandoned cart recovery plugin for WooCommerce. No bloat, no tracking, no upsells.

Features

  • Cart Tracking - Captures email and cart data on checkout via AJAX
  • Automated Emails - Configurable email sequences with customizable delays
  • Coupon Generation - Auto-generate unique discount codes per email
  • Cart Recovery - Tokenized URLs restore cart contents with one click
  • SMTP Compatible - Works with any SMTP plugin (Mailjet, Mailchimp, SendGrid, etc.)
  • Privacy Focused - No external requests, no analytics, no phone-home behavior
  • HPOS Compatible - Works with WooCommerce High-Performance Order Storage
  • Blocks Compatible - Works with WooCommerce Checkout Blocks

Email Modes

Maple Carts supports two email modes:

Built-in Emails (Default)

Send timed recovery emails directly through WordPress/SMTP. Configure email templates with delays (1 hour, 24 hours, 3 days, etc.) and the plugin sends them automatically.

Mailjet Sync

Instead of sending emails directly, sync abandoned cart data to Mailjet as contact properties. This allows you to:

  • Use Mailjet's powerful automation builder
  • Create complex multi-step workflows
  • Combine with other Mailjet segments and triggers
  • Use Mailjet's analytics and A/B testing

Mailjet Contact Properties

When a cart is abandoned, these properties are synced to the contact in Mailjet:

Property Type Description
maple_has_abandoned_cart Boolean True when cart is abandoned, false when recovered
maple_cart_total Float Cart total value
maple_cart_currency String Currency code (USD, EUR, etc.)
maple_cart_product_count Integer Number of items in cart
maple_cart_product_names String Product names (comma separated)
maple_cart_categories String Product categories (comma separated)
maple_cart_value_level String low (<$20), medium ($20-80), high ($80+)
maple_abandonment_type String checkout (email only) or payment (filled billing)
maple_cart_recovery_url String Recovery URL with coupon and UTM tracking
maple_cart_first_seen_at DateTime When cart was first created (funnel entry)
maple_cart_abandoned_at DateTime When the cart was abandoned
maple_cart_coupon_code String Generated coupon code (if enabled)
maple_customer_first_name String Customer first name
maple_customer_last_name String Customer last name
maple_recovered_via String Attribution: mailjet, email_link, direct, purchase

Example Mailjet Automation Conditions

maple_has_abandoned_cart equals true
maple_cart_total is greater than 50
maple_cart_value_level equals high
maple_cart_categories contains "Electronics"
maple_abandonment_type equals payment
maple_cart_abandoned_at is less than 24 hours ago

Recovery Attribution

Recovery URLs include UTM parameters for analytics attribution:

  • Built-in emails: utm_source=maple_carts&utm_medium=email&utm_campaign=cart_recovery
  • Mailjet: utm_source=mailjet

The plugin tracks recovery source both in the database and syncs to Mailjet:

maple_recovered_via Description
mailjet Recovered via Mailjet automation email
builtin_email Recovered via built-in email system
email_link Recovered via generic/shared recovery link
direct Customer returned without clicking a recovery link
purchase Direct purchase (cart was never abandoned)

This enables full recovery performance analysis across channels.

Setup

  1. Go to Settings → Email Mode → Mailjet Sync
  2. Enter your Mailjet API Key and Secret Key
  3. Click "Test Connection" to verify credentials
  4. Click "Setup Contact Properties" to create the properties in Mailjet
  5. Save settings
  6. In Mailjet, create a Segment using maple_has_abandoned_cart equals true
  7. Use that Segment in your automation workflows

Developer Hooks

Maple Carts provides action hooks for integrations like Facebook CAPI, custom analytics, etc.

Available Actions

// Fires whenever a cart is created or updated (for retargeting pixels)
do_action( 'maple_carts_cart_updated', $cart );

// Fires when a cart is marked as abandoned
do_action( 'maple_carts_cart_abandoned', $cart_id, $cart );

// Fires when an abandoned cart is recovered
do_action( 'maple_carts_cart_recovered', $cart_id, $cart );

// Fires when a cart converts to an order
do_action( 'maple_carts_cart_converted', $cart_id, $cart );

Example: Facebook CAPI Integration

add_action( 'maple_carts_cart_updated', function( $cart ) {
    // Send AddToCart event to Facebook CAPI
    if ( ! empty( $cart->email ) ) {
        // Your Facebook CAPI code here
    }
});

add_action( 'maple_carts_cart_abandoned', function( $cart_id, $cart ) {
    // Send custom event for abandoned cart
}, 10, 2 );

GDPR Compliance

Maple Carts includes built-in GDPR compliance features:

Privacy Tools Integration

  • Data Export: Integrates with WordPress Privacy Tools (Tools → Export Personal Data)
  • Data Erasure: Integrates with WordPress Privacy Tools (Tools → Erase Personal Data)
  • Privacy Policy: Adds suggested text to your Privacy Policy page
  • Optional Consent Checkbox: Enable in Settings → Privacy to require explicit opt-in
  • Consent Text: Customizable checkbox label
  • Session-based Consent: Consent is remembered for the checkout session

User Rights

  • Unsubscribe: One-click unsubscribe link in every email
  • Delete Data: Optional one-click data deletion link in emails (enable in Settings → Privacy)
  • Automatic Cleanup: Data automatically deleted after configurable retention period (default 90 days)

Note: The "Delete my data" link is optional and disabled by default. Enable it in Settings → Privacy if you have customers in the EU or other regions with data deletion requirements.

Data Collected

When enabled, Maple Carts collects:

  • Email address, name, phone number
  • Billing address
  • Cart contents and total
  • IP address and browser information

All data is stored locally in your WordPress database. No data is sent to external servers.

Requirements

  • WordPress 5.8+
  • WooCommerce 5.0+
  • PHP 7.4+

Installation

  1. Upload the maple-carts folder to /wp-content/plugins/
  2. Activate the plugin through the 'Plugins' menu in WordPress
  3. Go to Maple Carts > Settings to configure
  4. Go to Maple Carts > Email Templates to activate your email sequence

Email Placeholders

Use these in your email templates:

Placeholder Description
{{customer_name}} Customer's first name
{{customer_email}} Customer's email address
{{cart_contents}} HTML table of cart items
{{cart_total}} Formatted cart total
{{product_names}} Comma-separated product names
{{recovery_url}} Link to restore cart
{{coupon_code}} Generated coupon code
{{coupon_amount}} Discount amount (e.g., "10%" or "$5.00")
{{coupon_expires}} Days until coupon expires
{{site_name}} Your site name
{{unsubscribe_link}} Unsubscribe link
{{delete_data_link}} GDPR data deletion link (only shown if enabled in settings)

SMTP Integration

Maple Carts uses WordPress's native wp_mail() function, which means it automatically works with any SMTP plugin:

  • Mailjet - Install "Mailjet for WordPress" plugin
  • Mailchimp/Mandrill - Install "Mailchimp Transactional Email" plugin
  • SendGrid - Install "SendGrid" plugin
  • Amazon SES - Install "WP Mail SMTP" and configure SES
  • Any SMTP - Use "WP Mail SMTP" or similar

Just install and configure your preferred SMTP plugin - Maple Carts will use it automatically.

Database Tables

The plugin creates 3 custom tables:

  • wp_maple_carts - Abandoned cart data
  • wp_maple_carts_emails - Email templates
  • wp_maple_carts_email_log - Sent email history

Hooks & Filters

Actions

// After a recovery email is sent
do_action( 'maple_carts_email_sent', $email_data, $subject );

Filters

// Modify email placeholders
add_filter( 'maple_carts_email_replacements', function( $replacements, $email_data ) {
    $replacements['{{custom}}'] = 'Custom Value';
    return $replacements;
}, 10, 2 );

// Modify email before sending
add_filter( 'maple_carts_before_send_email', function( $email ) {
    // $email contains: to, subject, body, headers
    return $email;
} );

Comparison with Original Plugin

Feature Original (CartFlows) Maple Carts
Size 4.2 MB ~150 KB
PHP Files 64 8
Lines of Code 17,205 ~2,500
External Requests Yes (analytics) None
React Admin Yes (1.8 MB) No (PHP)
NPS Surveys Yes No
Upsells Yes No

License

GPL v2 or later

Changelog

1.0.0

  • Initial release