WD Events Tickets Plus

WD Events Tickets Plus adds lightweight paid ticketing to the WD Events ecosystem using Stripe Checkout.

It builds on WD Events Lite and WD Events Tickets to provide flexible multi-ticket event bookings, attendee management, Stripe payments and CSV exports directly inside WordPress without requiring WooCommerce or a large ticketing platform.

The plugin is designed for SMEs, webinars, workshops, conferences, networking events, clubs and community organisations.

Functional overview

  • Stripe Checkout integration
  • Free and paid ticket combinations
  • Multiple ticket types per event
  • Ticket-type capacity support
  • Per-email ticket restrictions
  • Ticket-type quantity limits
  • Drag-sort ticket ordering
  • Test and live Stripe modes
  • Paid order records
  • Attendee creation after successful Stripe webhook
  • Paid attendee CSV export
  • Manual admin check-in
  • Email confirmation after payment
  • Required field validation
  • Builder-friendly shortcode output
  • No WooCommerce dependency
Important: Stripe webhook setup is required. Paid attendees are created after Stripe confirms payment via webhook.

Installation

  1. Install and activate WD Events Lite.
  2. Install and activate WD Events Tickets.
  3. Install and activate WD Events Tickets Plus.
Note: Advanced Custom Fields Pro is no longer required for multi-ticket support.

Stripe configuration

Creating the required API keys

You can create publishable and secret keys yourself in your Stripe Dashboard:

  1. Click on Developers in the left bottom navigation
  2. Select API keys
  3. Click Create secret key to generate a new secret key
  4. Your publishable key is already displayed on the same page and can be copied

Each secret key you create will have a corresponding publishable key automatically available. Make sure to copy your secret key immediately after creation — it won’t be shown again for security reasons.

Settings page

Go to:

WordPress Admin → Settings → WD Tickets Plus

Test mode

For testing, add:

  • pk_test_... Test Publishable Key
  • sk_test_... Test Secret Key
  • whsec_... Test Webhook Signing Secret

Live mode

For production, add:

  • pk_live_... Live Publishable Key
  • sk_live_... Live Secret Key
  • whsec_... Live Webhook Signing Secret

Webhook endpoint

Add this endpoint in Stripe:

https://yourdomain.com/wp-json/wd-events-tickets-plus/v1/stripe-webhook

Event to listen for:

checkout.session.completed

Stripe test card

4242 4242 4242 4242

Use any future expiry date, any CVC and any postcode.

Important: Without the Stripe webhook:

  • Payments may complete in Stripe
  • Orders may be created in WordPress
  • Attendees will not be created
  • No confirmation email will be sent

Ensure the webhook is configured before going live.

Event settings

Go to:

WordPress Admin → Events → Edit Event

Enable:

  • Enable Tickets Plus for this event

Once enabled:

  • Multiple Ticket Types can be associated with the event
  • The booking form is automatically generated
  • Free and paid tickets can be mixed together

Ticket Types

Go to:

WordPress Admin → Events → Ticket Types

Create one or more Ticket Types and associate them with an event.

Examples:

  • Early Bird
  • Standard Ticket
  • VIP Ticket
  • Member Ticket
  • Guest Ticket
  • Sponsor Package

Each Ticket Type supports:

  • Ticket name
  • Price
  • Description
  • Limit per email address
  • Ticket-type capacity
  • Max per booking
  • Active / inactive status
  • Associated event

Example: member and guest tickets

Member Ticket
Price: 0.00
Limit Per Email: 1
Guest Ticket
Price: 5.00
Limit Per Email: unlimited
Use case: This structure allows “first ticket free, guest tickets paid” workflows without complex pricing rules.

Drag sorting ticket types

Ticket Types can be reordered directly in:

WordPress Admin → Events → Ticket Types

Simply drag ticket rows into the required order.

The frontend booking form automatically follows the same order.

Useful for:

  • Early Bird before Standard
  • VIP above General Admission
  • Member tickets above Guest tickets
  • Gold / Silver / Bronze sponsor ordering

Shortcode

Add this to the single event template where the paid booking form should appear:

[wd_event_paid_ticket_form]

Booking flow

  1. User selects ticket quantities.
  2. User completes registration fields.
  3. Required fields are validated.
  4. Capacity and email limit checks run.
  5. User is redirected to Stripe Checkout.
  6. User completes payment.
  7. Stripe redirects the user back to the event page.
  8. Stripe webhook confirms payment to WordPress.
  9. The order is marked as paid.
  10. An attendee record is created.
  11. A confirmation email is sent.

Form validation

All paid ticket forms validate:

  • Name
  • Email
  • Ticket quantities
  • Ticket-type capacities
  • Email booking limits

If validation fails:

  • The form will not process
  • The user is returned to the event page
  • An alert message is displayed above the form
  • No order is created
  • No Stripe checkout is started

Limit per email address

Tickets Plus can restrict the number of tickets that can be booked using the same email address.

This is checked before Stripe Checkout is created.

The plugin checks:

  • Existing attendees for the same event and email address
  • Pending or paid orders for the same event and email address
  • The requested ticket quantity

If the existing quantity plus requested quantity exceeds the configured limit, the booking is stopped and the user sees an alert.

Example alert:

This ticket type is limited per email address.

Example: club BBQ

Member Ticket:
Price: 0.00
Limit Per Email: 1

Guest Ticket:
Price: 5.00
Limit Per Email: unlimited
Note: The multi-ticket architecture allows free member tickets and paid guest tickets to coexist naturally on the same event.

Admin features

Ticket Orders

Go to:

WordPress Admin → Ticket Orders

Orders include:

  • Event
  • Name
  • Email
  • Phone
  • Ticket breakdown
  • Quantity
  • Amount
  • Status
  • Stripe session ID
  • Linked attendee
  • Stripe error response, if applicable

Attendees

Go to:

WordPress Admin → Attendees

Paid attendees include:

  • Linked event
  • Linked order
  • Name
  • Email
  • Phone
  • Ticket selections
  • Ticket quantities
  • Paid status
  • Check-in status
  • Check-in time

Manual check-in

Open an attendee and use:

  • Mark as checked in
  • Mark as not checked in

CSV export

Use the paid attendee CSV export to download:

  • Name
  • Event
  • Email
  • Phone
  • Ticket selections
  • Quantities
  • Status
  • Check-in status
  • Check-in time
  • Order ID
  • Registration date

Error messages

The system may display:

  • Please complete all required fields
  • Please enter a valid email address
  • Please enter at least one ticket
  • Sorry, there are not enough places remaining
  • Registration for this event has closed
  • This ticket type is limited per email address
  • Stripe configuration error

These appear above the form and prevent the booking from continuing.

What happens after booking

  • An order is created
  • The user is redirected to Stripe
  • Payment is completed
  • Stripe confirms the payment via webhook
  • An attendee is created
  • A confirmation email is sent

Email requirements

Clients should use authenticated email delivery for reliable booking confirmations.
  • Use a domain sender such as [email protected]
  • Use an SMTP plugin or transactional mail provider
  • Configure SPF
  • Configure DKIM
  • Configure DMARC where possible

Testing checklist

  1. Set the plugin to Test mode.
  2. Add Stripe test keys.
  3. Add the test webhook in Stripe.
  4. Create a test event.
  5. Enable Tickets Plus for the event.
  6. Create Ticket Types.
  7. Add ticket pricing.
  8. Optionally set email limits.
  9. Add [wd_event_paid_ticket_form] to the event template.
  10. Submit the form.
  11. Complete Stripe test checkout.
  12. Confirm order appears in WordPress.
  13. Confirm Stripe has the payment.
  14. Confirm attendee is created after webhook.
  15. Confirm confirmation email is received.
  16. Test manual check-in.
  17. Export paid attendee CSV.
  18. Test drag sorting of Ticket Types.

Production checklist

  1. Switch plugin to Live mode.
  2. Add live Stripe keys.
  3. Create live webhook in Stripe.
  4. Run a low-value live test payment.
  5. Confirm emails deliver correctly.
  6. Confirm attendee creation and check-in workflow.
  7. Confirm ticket limits behave correctly if used.

Performance notes

WD Events Tickets Plus follows the same lightweight approach as WD Events Lite.

  • No WooCommerce dependency
  • No embedded payment gateway loaded site-wide
  • Stripe Checkout only loads when required
  • Ticketing logic only runs where the ticket form is used
Performance note: Normal website pages do not load Stripe payment forms or ticketing logic unless ticket functionality is actively being used.