Docs Evenzo – Event Tickets, Calendar and Check-in for WooCommerce

Waitlist

Waitlist#

When a ticket product sells out, the waitlist collects interested customers and emails them when stock comes back.

How the waitlist works#

  1. A ticket product goes out of stock
  2. A waitlist form replaces the add to cart area on the product page
  3. Visitors join with their email and the number of tickets they need
  4. When stock is restored, the earliest entries are emailed, one per unit of stock
  5. Each notified customer has a limited time to buy before the offer expires
  6. When an offer expires, the next person in line is emailed

The waitlist is tied to WooCommerce product stock, not to event capacity, except for recurring event tickets. A recurring ticket never goes out of stock, so its waitlist works per date: the form shows when the chosen date is sold out. See Waitlist for recurring event tickets.

Enabling the waitlist#

Per product#

  1. Edit the ticket product
  2. On the General tab, find the options below the ticket settings
  3. Check Enable Waitlist
  4. Set Waitlist offer expires (hours). Leave it empty or 0 for no expiry
  5. Update the product

The fields only appear on products with Event Ticket ticked. Tick it and update the product first if the waitlist options are missing.

Global settings#

Events > Settings > Tickets has a Waitlist checkbox (“Enable waitlist by default for new ticket products”) and a Waitlist Offer Expiry field. These options are saved but not read by the waitlist code. Set the options on each product instead.

Waitlist form#

When a product is out of stock and the waitlist is enabled, visitors see the form below. For a recurring event ticket, the form shows when the chosen date is sold out instead, on the event page and the product page.

The form has:

  • Heading: “Join the Waitlist”
  • Email Address (required, hidden for logged-in users who use their account email)
  • Your Name (optional, guests only)
  • Tickets Needed (1 to 10, default 1)
  • Join Waitlist button

After joining, the message shows their position in the queue. Logged-in users who are already on the list see a notice instead of the form.

There is no filter for adding form fields.

Managing the waitlist#

Viewing the waitlist#

Go to Events > Waitlist. The page requires the manage_woocommerce capability.

The table shows:

  • (position)#

  • Name
  • Email
  • Product
  • Event (the event, or the date of a recurring event, as “Title (date)”)
  • Qty
  • Status
  • Date Added
  • Expires
  • Actions

Filtering#

Filter by:

  • Product (event ticket products)
  • Event (each date of a recurring event is listed as “Title (date)”)
  • Status (Waiting, Notified, Purchased, Expired)

Product meta box#

The product edit screen has an Event Waitlist side box showing the number of people waiting and a View Waitlist link.

Automatic notifications#

Trigger conditions#

Notifications are sent when:

  • Product stock is set to a value above 0 (woocommerce_product_set_stock). One entry is notified per unit of stock

  • A notified offer expires (hourly cron emwc_waitlist_expiration_check). The next entry is notified

  • A single ticket is cancelled on the Attendees screen (emwc_ticket_cancelled). One entry is notified

For a normal event, raising the event capacity sets the product stock, which triggers the notifications above.

Recurring event tickets#

Each date of a recurring event has its own list. Only the date’s list is notified, as many entries as the date has places left, when:

  • A ticket for the date is cancelled
  • An order with a ticket for the date is cancelled or refunded
  • The date’s capacity is raised, on the date or on the main event
  • A notified offer for the date expires

Notification email#

A plain text email sent with wp_mail. Subject: “Tickets Now Available - {product name}”. It contains a greeting, the product name, the expiry time (if set), and a link to the product page. For a recurring event ticket, the subject and text also name the date, and the link opens the event page with that date chosen.

The email is not a WooCommerce email and has no template. Use the emwc_waitlist_notification_sent action to send your own message.

Expiration#

  • Set per product in hours
  • Entries whose offer passed are marked Expired on the next hourly cron run
  • The next waiting entry is notified at the same time

Manual actions#

Actions appear in the last column of Events > Waitlist for entries with the Waiting status.

Notify#

  1. Find the entry
  2. Click Notify
  3. The entry is marked Notified, the email is sent, and the expiry timer starts

Remove#

  1. Find the entry
  2. Click Remove
  3. Confirm. The entry is deleted and positions shift up

Waitlist statuses#

StatusDescription
WaitingIn queue, not yet notified
NotifiedEmail sent, waiting for purchase
PurchasedShown in the filter, but the plugin never sets this status
ExpiredOffer time passed without a purchase

Entries are not marked Purchased when the customer buys. Remove them by hand once they have ordered.

Integration#

WooCommerce stock#

Stock drives everything:

  • Out of stock = form shown
  • Stock restored = notifications sent
  • Stock quantity = number of entries notified

If stock management is off, a product that comes back in stock notifies one entry.

Multiple ticket types#

Each product has its own waitlist. A customer on the waitlist for one ticket type is not notified when another type comes back in stock.

Waitlist for recurring event tickets#

One recurring ticket product sells every date of the series, and each date has its own capacity, so the product never goes out of stock. The waitlist works per date instead:

  • The date list lets customers pick a sold out date when the waitlist is on. The form for that date replaces the buy button, with a heading such as “Join the waitlist for October 4, 2026 7:00 pm”
  • Dates on sale show the buy button. Dates that have started or are cancelled show no form
  • The form sends the date, and the site checks it belongs to the event and is sold out
  • The same email can wait for several dates, once per date. The position shown is the position for that date

Hooks#

// Someone joined the waitlist
add_action( 'emwc_waitlist_joined', function( $entry_id, $product_id, $email ) {
    // $entry_id is the row ID in wp_emwc_waitlist
}, 10, 3 );

// Notification email sent
add_action( 'emwc_waitlist_notification_sent', function( $entry, $product ) {
    // $entry is the waitlist row as an array, $product is a WC_Product
}, 10, 2 );

Sign-up limits#

Guest sign-ups are limited to 30 per IP address per hour and 3 per email address per day. Change them with the emwc_waitlist_rate_limits filter.

If your site sits behind a proxy or CDN such as Cloudflare, every visitor can reach WordPress from the same address. Pass the real visitor IP with the emwc_waitlist_client_ip filter, and only from a header your proxy sets:

add_filter( 'emwc_waitlist_client_ip', function( $ip ) {
    return isset( $_SERVER['HTTP_CF_CONNECTING_IP'] ) ? sanitize_text_field( wp_unslash( $_SERVER['HTTP_CF_CONNECTING_IP'] ) ) : $ip;
} );

Data lives in the wp_emwc_waitlist table: id, product_id, event_id, user_id, email, name, quantity, status, notified_at, expires_at, created_at.

Set a sensible expiry#

  • Too short: people miss the window
  • Too long: others wait for nothing
  • 24 to 48 hours works for most events

Watch the list#

  • Remove entries that have bought tickets
  • Long queues mean demand for more dates or a bigger venue