WordPress Plugin

Event Registration & Ticketing System for WordPress

A custom WordPress plugin that registered 1000+ guests for a large offline event: tickets, phone login, email OTP, per-city transfer seat limits, CSV export.

  • PHP
  • WordPress
  • AJAX
  • MySQL
Illustration of an event ticket with a seat marker

The story

A non-profit was preparing a huge reunion event — over a thousand guests from all over the country, several attendee categories, and organized train transfers from four cities. Eventbrite-style services couldn’t model the real constraints: limited train seats per departure city, separate flows for guests and staff, and an ops team that needed live numbers, not exported spreadsheets from a third-party dashboard.

I built the whole thing as a single self-contained WordPress plugin.

How it works

  • Tickets as a custom post type. Every registration becomes a ticket with a unique prefixed number, category, guest count, and travel details — all queryable with plain WordPress APIs.
  • Train seat capacity per city. Each departure city has a seat limit, editable by admins right in the stats dashboard. A public AJAX endpoint returns live seat availability, so the registration form disables a city the moment it sells out. Offline registrations (people signed up by phone) are added as “manual seats” on top of the automatic count.
  • Login without passwords. Guests check and retrieve their ticket by phone number. Staff members verify themselves with a one-time code sent to their corporate email — the OTP is domain-restricted, stored in a transient with attempt limits, and expires in 10 minutes.
  • An ops dashboard inside wp-admin. Live statistics by category, city and status, inline ticket editing, and one-click CSV export with every field the logistics team needs — names, phones, transfer city, guests, kids, registration date.

The interesting part

The whole system is one plugin file — deliberately. For an event with a fixed date and a small ops team, deployability beat architecture: drop the file in wp-content/plugins, activate, done. No build step, no migrations, no dependencies. It handled the full registration wave without a hiccup.