Docs Product page Dashboard
Docs Marketing Events

Events

v1.1.2

Sell tickets to dated events and courses — a seats-left calendar, Stripe checkout, and optional QR tickets with door check-in, all inside your own site.

Included in every plan Updated July 2026

Overview

The Events module turns any WordPress page into a ticketed calendar of dated events and course sessions, each with its own seat pool.

Events is built for workshops, courses, classes and one-off events — anything with a fixed date, a limited number of seats, and (optionally) paid tickets. Visitors see a month calendar (or list) of upcoming dates with seats-left, pick a quantity, and register. Everything stays inside your own site.

Registrations
Every order across your events. One order can hold several tickets.
Export CSV
4
Total orders
4
Confirmed
0
Completed
0
Cancelled
ClientEventDateTicketsStatus
Jordan Lee
jordan.lee@example.com
Summer Yoga Retreat
30/07/2026 – 31/07/20261ConfirmedCompleteCancel
Sofia Martins
sofia@example.com
Pottery Workshop
16:00 – 21:00
25/07/20262ConfirmedCompleteCancel
Alex Kim
alex.kim@example.com
Summer Yoga Retreat
30/07/2026 – 31/07/20262ConfirmedCompleteCancel
Registrations — every order across your events, with one-click confirm / complete / cancel and CSV export.

What you can do

  • Publish events with a price per ticket, custom intake fields and a per-order ticket cap
  • Schedule any number of dates (occurrences), each with its own seat pool
  • Show a month calendar / list / cards with live seats-left, so you never oversell
  • Take payment at registration with Stripe, or collect on location
  • Optionally issue a QR ticket per seat, emailed to the buyer, with a staff check-in scanner
  • Send automatic confirmation emails to attendees and notifications to organizers
  • Translate every front-end label, with one-click presets for EN / NL / FR / DE / ES
How the pieces fitAn event is what people book. Each date is a scheduled occurrence of it with its own seats. A registration is one order of N tickets. Turn on QR tickets and each seat also becomes an individually scannable ticket.

Requirements & compatibility

Events runs on any modern WordPress host. Payments and QR check-in use their own free pieces.

RequirementMinimumRecommended
WordPress6.06.5 or newer
PHP7.48.1 or newer
PHP GD extensionOnly for QR ticketsEnabled (standard on most hosts)
HTTPSFor payments & the camera scannerSite-wide

Optional integrations

IntegrationUsed forNeeded?
StripeOnline card paymentsOnly if you sell paid tickets
Works with any themeThe events page inherits your theme’s fonts, and you can set the layout, light/dark mode and accent colors under Settings → Style.

Installation & activation

Events ships inside WPStack — nothing extra to download. Switch it on per site from the modules panel.

1

Activate the module

In WPStack → Modules, flip Events on. A new Events item appears in the WPStack menu.

2

Set your basics

Open Events → Settings → General and set the time zone, currency and date/time format.

3

Create an event

Under Events → Events, add an event — name, price per ticket, and any custom fields.

4

Add a date

Under Events → Dates, schedule an occurrence of that event and set its seat capacity.

5

Publish the page

Add the [wpstack_events] shortcode (or the Elementor widget) to any page.

Enable HTTPS firstIf you sell paid tickets or run the check-in scanner, serve your site over HTTPS — Stripe won’t process cards and browsers won’t open the camera on an insecure connection.

The building blocks

Events is made of a few connected pieces. Set them up in this order.

1

1 · Event

The thing people book — e.g. “Pottery Workshop”. Holds the price per ticket, per-order cap, payment mode, custom fields and (optionally) QR tickets. Under Events → Events.

2

2 · Date

A scheduled occurrence of an event (a single day or a date range), with its own seat pool, times and status. Under Events → Dates.

3

3 · Organizer

Optional. The person running an event; assign one to a date and they’re emailed a notification for each registration. Under Events → Organizers.

4

4 · Registration

Every order (N tickets) an attendee makes. Manage them under Events → Registrations; if QR tickets are on, individual tickets appear under Events → Tickets.

Events

An event is the reusable definition. Create as many as you like under Events → Events.

SettingTypeDefaultWhat it does
Name & descriptiontextShown on the events page. An optional image can be added too.
Price / ticketnumber0Price per ticket. Leave blank/0 for a free event.
Max tickets / ordernumber10Caps the quantity picker on the registration form.
Payment modeselectOn locationon_location (pay in person / free) or online (pay the full amount now via Stripe).
Payment gatewaysselectStripeWhich connected gateway online payments use.
Custom fieldsbuildernoneExtra intake questions captured at registration (text, number, select, checkbox…), with optional conditional logic.
Colorcolor#3f6c51Accent used for this event on the calendar.
Issue QR ticketstoggleOffWhen on, buyers enter a name per ticket, get one QR code per seat by email, and each can be checked in at the door. See QR ticketing.

Dates & seats

A date is one occurrence of an event. Each date has its own seat pool, so the same event can run many times.

Dates
Scheduled dates — by days (full/half) or by time.
Add new date
EventDatesScheduleOrganizerBooked / cap.LeftActions
Summer Yoga Retreat30/07/2026 – 31/07/2026½ lastJordan Lee5 / 2015
Pottery Workshop25/07/202616:00 – 21:002 / 6058
Dates — each with its own seat pool, booked / capacity and seats-left.
SettingTypeDefaultWhat it does
EventselectWhich event this date is an occurrence of.
Start / end datedateA single day, or a range for multi-day courses.
Start / end timetimeOptional times shown on the calendar and in emails.
Capacity (seats)number0The seat pool for this occurrence. Availability is capacity − tickets sold, so it never oversells.
OrganizerselectnoneOptional — who runs it; they get a notification for each registration.
StatusselectOpenOnly open dates appear on the front end.
Seats-left is computed from confirmed/completed registrations for that date. When a seat pool is empty the date shows Sold out and the form is disabled.

Organizers

Organizers are optional contacts for the people who run your events.

Each organizer has a name, email, phone and short bio. Assign one to a date and they’re emailed a notification for every registration on that date (otherwise the site admin is notified). Organizers are purely for notifications — attendees don’t see them unless you show them.

Managing registrations

Every order lands under Events → Registrations, grouped by upcoming, completed and cancelled.

  • One order can hold several tickets — capacity is always counted as the sum of tickets.
  • Set an order to confirmed / completed / cancelled; cancelling frees its seats back into the pool.
  • Export CSV of registrations for any event or status.
  • Open an order to see attendee details, custom-field answers, payment status, and (if enabled) its QR tickets.

QR ticketing (optional)

Turn on “Issue QR tickets” on an event to give every seat its own scannable ticket. Off by default — nothing changes for events that don’t use it.

Tickets
Every issued QR ticket. Check attendees in here or from the scanner page.
2
Tickets
0
Checked in
2
Not yet in
AttendeeEventDateOrderCodeStatusActions
Sofia MartinsPottery Workshop25/07/2026#3FLJK60DBF9XSHUCGValidCheck in
Liam BrooksPottery Workshop25/07/2026#3TNI4FWXZK8PACYJ9ValidCheck in
Tickets — every issued QR ticket, with its code, status and one-tap check-in.
1

Enable per event

On the event, tick Issue QR tickets. Only that event’s dates issue tickets.

2

Buyers name each seat

At checkout, the buyer enters an attendee name for each ticket in the order.

3

Tickets are emailed

The confirmation email includes one QR code per seat, each with its attendee name and a unique code.

4

Manage them

Every ticket appears under Events → Tickets — filter by event/status, search, and check in or undo manually.

One QR per seatBuy 3 tickets → 3 separate QR codes, each scanned and checked in independently. Cancelling the order voids its tickets and frees the seats.

Door check-in scanner

A staff-only page that scans ticket QR codes with the device camera and checks attendees in.

1

Add the scanner page

Put [wpstack_events_scanner] on a private page. Only signed-in users who can manage the site see the scanner.

2

Scan

Open it on a phone over HTTPS, tap Start camera, and point at a ticket. You can also type a code by hand.

3

Instant result

Each scan shows a big ✓ Checked in, an amber Already checked in (with time), or a red Invalid / cancelled — with a beep.

No app to installThe scanner uses the browser’s built-in QR reader (Chrome, or Safari 17+). If a device can’t use the camera, staff can type the short code printed under each QR.

Payments (Stripe)

Sell tickets online with Stripe, or collect payment on location.

1

Connect Stripe

Under Settings → Payment, enter your Stripe keys.

2

Set the event to “online”

On the event, set Payment mode to online and choose Stripe. Leave it on_location to collect in person.

3

Test first

Use Stripe test keys to confirm the checkout, then switch to live keys.

Online events charge price × tickets up front, and the registration is only created once payment is verified — so seats can’t be locked by an abandoned checkout.

Settings reference

The Settings screen is split into tabs. Here’s what each one controls.

SettingTypeDefaultWhat it does
GeneraltabTime zone, currency & symbol, and date/time format.
EmailtabConfirmation email + organizer notification (sender, subject, message) with placeholders like {event} {date} {tickets} {name}.
LabelstabOverride every front-end label; one-click language presets for EN / NL / FR / DE / ES.
StyletabFront-end layout (calendar / list / cards), light or dark theme, grid columns and accent colors.
PaymenttabConnect and configure the Stripe gateway.
ShortcodestabThe events shortcode and a quick setup checklist.

Embedding the events page

Place the calendar anywhere with a shortcode or the Elementor widget.

[wpstack_events]

The events calendar: upcoming dates with seats-left, and an in-page registration form.

eventOptional. An event ID to show only that event’s dates.
viewLayout — calendar (default), list or cards.
[wpstack_events_scanner]

Staff-only QR check-in page (must be signed in with manage-options).

textpage content
[wpstack_events]

[wpstack_events event="42" view="list"]
Elementor widgetThe same calendar is available as an Elementor widget (in the “WPStack Events” category) — drag it in and pick an event right in the editor.

Labels & translation

Every word on the events page can be changed under Settings → Labels.

Override step names, field labels, buttons, seats-left wording and email row labels. A language preset (English, Dutch, French, German, Spanish) fills every label and sets the calendar language in one click — a great starting point you can then tweak.

Frequently asked questions

An event is the reusable definition (price, fields, tickets). A date is one scheduled occurrence of it, with its own seats — so one event can run on many dates.

Availability is a date’s capacity minus the total tickets in its confirmed/completed orders. The server re-checks at write time, so two people can’t oversell the last seats.

Only if you set an event’s payment mode to online (full price × tickets via Stripe). Leave it on_location for free or pay-in-person events.

No — it’s off by default and per event. With it off, registrations work as a simple order + confirmation email. Turn it on only when you want scannable tickets and door check-in.

Yes. With QR tickets on, they name each seat and receive one QR per seat, each checked in independently at the door.

Yes. Settings → Labels lets you override every label, with one-click presets for English, Dutch, French, German and Spanish.

Troubleshooting

The most common issues and how to clear them.

SymptomLikely causeFix
No dates on the calendarNo open date, or the date already endedAdd a date under Events → Dates and set its status to Open.
Event shows “Sold out”The date’s seat pool is fullRaise the date’s capacity, or cancel an order to free seats.
Payment step is skippedEvent payment mode is on_locationSet it to online and connect Stripe under Settings → Payment.
QR image is blank in the emailPHP GD extension is missingEnable GD on the host (or ask support); the ticket code still works for manual check-in.
Scanner camera won’t openNot on HTTPS, or an older browserServe over HTTPS and use Chrome or Safari 17+; otherwise type the code by hand.

Changelog

1.1.0
July 2026
newOptional QR tickets — one scannable ticket per seat, emailed to the buyer.
newA staff check-in scanner ([wpstack_events_scanner]) and a Tickets admin tab.
newPer-seat attendee names at checkout.
1.0.0
Jun 2026
newTicketed dated events & courses with a per-date seat pool.
newMonth / list / cards calendar with live seats-left, and Stripe checkout.
Was this page helpful?