Title: Smart Waitlist for WooCommerce
Author: abdennourlaoubi
Published: <strong>September 28, 2026</strong>
Last modified: September 28, 2026

---

Search plugins

![](https://s.w.org/plugins/geopattern-icon/smart-waitlist-for-woocommerce.svg)

# Smart Waitlist for WooCommerce

 By [abdennourlaoubi](https://profiles.wordpress.org/abdennourlaoubi/)

[Download](https://downloads.wordpress.org/plugin/smart-waitlist-for-woocommerce.zip)

 * [Details](https://wordpress.org/plugins/smart-waitlist-for-woocommerce/#description)
 * [Reviews](https://wordpress.org/plugins/smart-waitlist-for-woocommerce/#reviews)
 *  [Installation](https://wordpress.org/plugins/smart-waitlist-for-woocommerce/#installation)
 * [Development](https://wordpress.org/plugins/smart-waitlist-for-woocommerce/#developers)

 [Support](https://wordpress.org/support/plugin/smart-waitlist-for-woocommerce/)

## Description

**Smart Waitlist for WooCommerce** automatically notifies customers when an out-
of-stock product is back in stock.

When a product runs out of stock, a “Notify Me When Available” form appears on the
product page. Customers enter their name and email to join the waitlist. The moment
you restock the product, every pending subscriber receives a personalized notification
email — automatically.

#### Core Features

 * **Automatic restock detection** — hooks directly into WooCommerce stock management;
   no manual steps required.
 * **Variable product support** — per-variation waitlists, so customers subscribe
   to the exact variant they want.
 * **Double opt-in support** — require email confirmation before users are added
   to the waitlist (now a core free feature).
 * **Smart form display** — form appears only on out-of-stock products; hidden when
   stock is available.
 * **Duplicate prevention** — customers cannot accidentally subscribe twice.
 * **Honeypot spam protection** — invisible field blocks automated spam submissions.
 * **HMAC-signed unsubscribe links** — every notification email contains a secure,
   one-click unsubscribe link.
 * **Batch notifications** — large waitlists are processed in background batches
   via WP-Cron to avoid timeouts.
 * **Admin dashboard** — searchable, filterable, sortable subscriber list with bulk
   actions (delete, mark as notified).
 * **Per-product settings** — enable or disable the waitlist individually for any
   product.
 * **Waitlist capacity limits** — optionally cap the number of subscribers per product(
   or per variation) to control stock flow.
 * **WooCommerce Settings integration** — configure waitlist emails under WooCommerce
   > Settings > Emails and waitlist behavior under WooCommerce > Settings > Products
   > Waitlist.
 * **Theme-overridable templates** — copy templates to your theme for complete HTML
   customisation.
 * **GDPR tools** — personal data export and erasure via WordPress Privacy Tools(
   Tools  Erase Personal Data).
 * **Developer-friendly** — action and filter hooks throughout; documented phpdoc
   on every method.
 * **WPCS-compliant** — all database queries use `$wpdb->prepare()`; all output 
   is escaped; nonces on every form.
 * **HPOS compatible** — declared compatible with WooCommerce High-Performance Order
   Storage.

#### Pro Version

Upgrade to the Pro Version (available at https://payhip.com/b/aH2Oq ) for advanced
features:

 * WhatsApp Business API notifications
 * Coupon-with-notification (send discount codes alongside the restock alert)

#### Privacy

This plugin stores subscriber names, email addresses, and optionally phone numbers
in a dedicated database table (`{prefix}swfwc_waitlist`). Data is retained until
manually deleted by the site administrator or until the subscriber unsubscribes.
No data is shared with third parties. Plugin data is fully removed on uninstall.

Personal data can be exported and erased via **Tools  Erase Personal Data** in compliance
with GDPR Article 17 and Article 20.

Consider updating your site’s Privacy Policy to reflect this data collection.

### Email Setup Guide

#### Email Configuration

 1. Configure a reliable SMTP or transactional email plugin first.
 2. Send a test email from the SMTP plugin and confirm it arrives.
 3. Go to **WooCommerce  Settings  Emails**.
 4. Enable and review **Waitlist Signup Confirmation**.
 5. Enable and review **Waitlist Restock Notification**.
 6. Test the waitlist flow with one out-of-stock product and one real email address.

#### Email Production Checklist

 * SMTP or transactional email test succeeds.
 * SPF, DKIM, and DMARC are configured for the sending domain.
 * Signup confirmation email arrives.
 * Restock notification email arrives after stock changes to `instock`.
 * Unsubscribe links work.
 * Emails are not consistently landing in spam.

#### Pro Version Features Setup

If you upgrade to the Pro version, you will get access to:
 * **WhatsApp Cloud API
Integration** for template-based restock messages. * **Auto-generated WooCommerce
Coupons** sent directly inside email alerts.

### License

Smart Waitlist for WooCommerce is free software: you can redistribute it and/or 
modify it under the terms of the GNU General Public License as published by the 
Free Software Foundation, either version 2 of the License, or any later version.

Smart Waitlist for WooCommerce is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

## Installation

#### Upload Installation

 1. Download the plugin ZIP file.
 2. Log in to your WordPress admin panel.
 3. Go to **Plugins  Add New  Upload Plugin**.
 4. Choose the ZIP file and click **Install Now**, then **Activate**.

#### After Activation

 1. Go to **WooCommerce  Settings  Products  Waitlist** to configure the plugin.
 2. Review the waitlist emails under **WooCommerce > Settings > Emails**.
 3. Customise email subjects, headings, and email types from WooCommerce’s email settings.
 4. The waitlist form will automatically appear on any out-of-stock product.

## FAQ

### Does this work with variable products?

Yes. The form appears when a customer selects a specific variation that is out of
stock. Subscribers are tracked per variation, so notifications are only sent when
that exact variation comes back in stock.

### Can I customise the form appearance?

Yes. Copy `templates/notify-form.php` from the plugin folder to `{your-theme}/smart-
waitlist-for-woocommerce/notify-form.php` and modify it freely. CSS custom properties
in `public/css/swfwc-public.css` make colour/spacing changes easy without overriding
templates.

### Can I customise the notification email?

Yes. Go to **WooCommerce > Settings > Emails** and update the waitlist email subjects,
headings, and email types. You can also customise the HTML template by copying `
templates/emails/email-notification.php` to your theme.

### What merge tags are available in the email?

{product_name}, `{product_url}`, `{customer_name}`, `{site_name}`, `{unsubscribe_url}`

### How do customers unsubscribe?

Every notification email contains a signed unsubscribe link. Clicking it marks the
subscriber as unsubscribed immediately — no login required.

### Is the unsubscribe link secure?

Yes. Each link contains an HMAC-SHA256 token signed with your site’s WordPress auth
salt. Tokens expire after 90 days and cannot be guessed or forged.

### Does it work with WooCommerce HPOS?

Yes. The plugin declares compatibility with WooCommerce High-Performance Order Storage(
HPOS / custom order tables).

### What happens if I have thousands of subscribers?

For waitlists with more than 50 subscribers, notifications are automatically queued
in batches of 25 via WP-Cron, with 30 seconds between batches. This prevents PHP
timeouts and server overload.

### Will my data be deleted if I uninstall the plugin?

Yes. The uninstall routine drops the `swfwc_waitlist` table and removes all plugin
options. This action is irreversible.

### Can I disable the waitlist for specific products?

Yes. Each product has a “Waitlist” meta box in the product editor where you can 
set it to Enabled, Disabled, or “Inherit global setting”.

### Does the plugin support GDPR right-to-erasure requests?

Yes. The plugin integrates with WordPress Privacy Tools (Tools  Erase Personal Data).
Submitting an erasure request for a customer’s email will permanently delete all
their waitlist records.

### Can I limit how many people join a single product’s waitlist?

Yes. Go to **WooCommerce  Settings  Products  Waitlist** and set **Max Subscribers
per Product**. Leave it at `0` for unlimited (the default).

### Can I use the plugin behind a reverse proxy or load balancer?

Yes. Define your trusted proxy IP addresses using the `swfwc_trusted_proxy_ips` 
filter or the `SWFWC_TRUSTED_PROXY_IPS` constant, and the plugin will correctly 
identify real client IPs from the `X-Forwarded-For` header. Without this configuration
the direct connection IP is used, which is the safe default.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Smart Waitlist for WooCommerce” is open source software. The following people have
contributed to this plugin.

Contributors

 *   [ abdennourlaoubi ](https://profiles.wordpress.org/abdennourlaoubi/)

[Translate “Smart Waitlist for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/smart-waitlist-for-woocommerce)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/smart-waitlist-for-woocommerce/),
check out the [SVN repository](https://plugins.svn.wordpress.org/smart-waitlist-for-woocommerce/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/smart-waitlist-for-woocommerce/)
by [RSS](https://plugins.trac.wordpress.org/log/smart-waitlist-for-woocommerce/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 2.0.0

 * **Breaking (internal only):** Renamed every internal identifier — classes, functions,
   hooks, options, the custom database table, post meta, cron hooks, nonces, and
   asset handles — from the “SWW”/”sww_” prefix to “SWFWC”/”swfwc_”. The old prefix
   was too short and collision-prone for the WordPress.org Plugin Directory. A one-
   time, automatic migration preserves all existing waitlist data, settings, and
   per-product toggles on upgrade; no action needed.
 * Fix: “Max Subscribers per Product” is now a free, fully configurable setting 
   under WooCommerce  Settings  Products  Waitlist. The subscriber-cap enforcement
   was already active in the free plugin; only the control to configure it was previously(
   incorrectly) hidden.
 * Fix: Removed all inline `<style>`/`<script>` blocks from PHP templates. CSS moved
   into `admin/css/swfwc-admin.css`; JS moved into `admin/js/swfwc-admin.js` using`
   wp_localize_script()` for nonces/strings.
 * Fix: Plain-text double opt-in confirmation email now escapes the confirmation
   link with `esc_url()` instead of `esc_url_raw()` at the point of output.
 * Fix: Corrected Plugin URI and Author URI to resolve correctly; corrected the 
   readme Contributors field.
 * Fix: Added `Requires Plugins: woocommerce` header plus a defensive activation-
   time WooCommerce check for older WordPress versions.
 * Housekeeping: Text domain corrected to `smart-waitlist-for-woocommerce` (matching
   the plugin slug) throughout.

#### 1.1.2

 * Critical fix: Bulk status updates now pass dynamic parameters to `$wpdb->prepare()`
   with variadic binding, restoring bulk mark-as-notified compatibility.
 * Email: Double opt-in confirmation now uses a dedicated WooCommerce email class
   with HTML/plain-text templates and WooCommerce Settings > Emails controls.
 * Cleanup: Removed legacy Gumroad license code and Pro features to focus on a lightweight
   freemium-first build.
 * Fix: Addressed casing issues in activation and deactivation hooks.
 * Documentation: Updated plugin version and compatibility metadata.

#### 1.1.1

 * Security: Rate limiter now only trusts X-Forwarded-For headers from configured
   trusted proxy IPs (SEC-02).
 * Security: Removed `SWFWC_get_pending_subscribers_extra_where` filter to eliminate
   SQL injection surface (SEC-01). Replaced with typed `$confirmed_only` boolean
   parameter.
 * Security: Unsubscribe tokens now include a 90-day expiry timestamp with backwards
   compatibility for existing tokens (SEC-06).
 * Bug fix: Re-subscribing after unsubscribing no longer silently fails to send 
   the confirmation email. MySQL’s `insert_id=0` on `ON DUPLICATE KEY UPDATE` is
   now handled by re-fetching the row ID (BUG-01).
 * Performance: Removed blocking `sleep()` call inside the WhatsApp cron worker.
   Retries are now scheduled as async events to avoid blocking the cron queue (PERF-
   01).
 * Performance: Batch processing now fetches all subscriber rows in a single `IN()`
   query instead of N individual SELECTs (BUG-02).
 * Performance: Admin list table status counts now use a single `GROUP BY` query
   instead of four separate `COUNT(*)` queries (WC-04).
 * Reliability: Notification lock transient prevents duplicate batches when the 
   stock-change hook fires more than once in quick succession (WC-01).
 * Database: Added `user_id` index to `swfwc_waitlist` table schema (DB-01).
 * Database: `delete_by_product()` now busts caches for all variation IDs, not only
   variation 0 (DB-04).
 * GDPR: Added personal data exporter (`wp_privacy_personal_data_exporters`) hook
   for data portability compliance.
 * GDPR: Added personal data eraser (`wp_privacy_personal_data_erasers`) hook for
   right-to-erasure compliance.
 * GDPR: Added optional GDPR consent checkbox (disabled by default; enable via `
   SWFWC_show_consent_checkbox` filter).
 * GDPR: Privacy policy URL appended to form privacy note via `wp_get_privacy_policy_url()`.
 * Architecture: `SWFWC_Email_Confirmation` now accepts `SWFWC_Database` via constructor,
   restoring the DI contract (ARCH-01).
 * Architecture: Button position option is now read at render-time instead of at
   hook-registration time (ARCH-02).
 * Architecture: Singleton `__clone()` now throws an exception instead of silently
   succeeding (ARCH-03).
 * Compatibility: Bumped DB schema version to 1.2.0 to trigger `dbDelta` on existing
   installs for the new index.

#### 1.0.0

 * Initial release.
 * Core waitlist functionality: subscribe, notify on restock, unsubscribe via link.
 * Variable product / variation support.
 * Admin dashboard with WP_List_Table (search, filter, bulk actions).
 * WooCommerce email class integration.
 * Async batch processing via WP-Cron.
 * HMAC-signed unsubscribe URLs.
 * Honeypot spam protection.
 * WooCommerce HPOS compatibility declaration.
 * Theme-overridable templates.
 * Full uninstall cleanup.

## Meta

 *  Version **2.0.0**
 *  Last updated **2 days ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.1.2**
 *  PHP version ** 8.0 or higher **
 * Tags
 * [back in stock](https://wordpress.org/plugins/tags/back-in-stock/)[notify](https://wordpress.org/plugins/tags/notify/)
   [out of stock](https://wordpress.org/plugins/tags/out-of-stock/)[waitlist](https://wordpress.org/plugins/tags/waitlist/)
   [woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/smart-waitlist-for-woocommerce/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/smart-waitlist-for-woocommerce/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/smart-waitlist-for-woocommerce/reviews/)

## Contributors

 *   [ abdennourlaoubi ](https://profiles.wordpress.org/abdennourlaoubi/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/smart-waitlist-for-woocommerce/)