Tickets & Passes for WooCommerce
Sell event tickets, timeslot bookings and season passes in WooCommerce. Scan QR codes at the door from any phone. No per-ticket fees.
Solid choice
Tickets & Passes for WooCommerce is a solid plugin choice in 2026, with a few things worth checking first. It runs on 10+ sites and was last updated 3 days ago, and scores 66/100 on our health check.
- Actively developed — last update 3 days ago
- Tested with the latest WordPress (7.1)
- Small user base (10+ active installs)
- Very few reviews so far
How does it stack up?
Side-by-side on installs, updates, ratings & supportDaily downloads
Download spikes usually follow a new release — each site that auto-updates counts as a download.
Rankings
Where Tickets & Passes for WooCom… stands todayWordPress.org search rankings
Live position in the plugin search, top 100| Keyword | Position |
|---|---|
| Event Tickets | >100 |
| qr code | >100 |
| season pass | #3 |
| ticket scanner | #25 |
| timeslot booking | #23 |
Version adoption
Share of active sites per release.
About Tickets & Passes for WooCommerce
From the official readme · v2.1.1Description
Tickets & Passes adds three product types to WooCommerce: Ticket, Timeslot Ticket and Pass. Customers buy them like anything else in your shop, every purchase issues a QR code, and staff scan that code at the door from a phone browser.
Everything runs on your own site. There is no ticketing service to sign up for, no fee per ticket sold, and no account with anyone else.
Built for venues, attractions, museums, escape rooms, festivals, clubs and anyone who sells admission and then has to let people in.
Three product types
- Ticket – plain admission with a validity window and a set number of uses. Day tickets, entry tickets, gift admission. The customer can pick their own start date within a range you set, or you fix the date yourself.
- Timeslot Ticket – admission for a specific date and time, with a capacity per slot. Generate slots on a repeating schedule instead of building next month by hand. Unpaid reservations are released automatically, so an abandoned checkout never sits on a seat.
- Pass – valid across a period rather than a single visit: season passes, memberships, annual cards. Passes can include guest passes the holder gives away, carry a cardholder photo, and enforce a cooldown between scans.
Check-in at the door
- A scanner page on your own domain, at
/check-in/. Full screen, no admin bar, nothing for door staff to get lost in. - No app to install. Any modern mobile browser works. Where the phone has a native barcode detector the scanner uses it, otherwise it decodes in the page.
- Colour-coded results you choose: valid, already used, expired, on cooldown, or not found.
- Photo check on passes. Staff see the cardholder photo beside the scan result and can compare it with the person in front of them.
- A Scanner user role that grants check-in and nothing else in wp-admin.
- Every decision is made on your server, never on the phone, so a cancelled ticket cannot be waved through by putting the phone in airplane mode.
- A REST check-in API underneath, so a third-party or native scanner app can use the same endpoints.
Running it from wp-admin
- A dashboard per product type – Tickets, Timeslot Tickets and Passes – each with search, manual check-in, resend, reset and cancel.
- Manual check-in for when there is no phone at the door.
- Analytics charting check-in activity by day and by hour, with a CSV export.
- Per-type colours and hint text, so a ticket looks like part of your site rather than part of a plugin.
- Shop Manager friendly. Everything is gated on
manage_woocommerce; nobody needs an Administrator account to run the door.
What your customers get
- Tickets and Passes tabs on the standard WooCommerce My Account page.
- The QR code on screen plus a printable PDF download.
- Live status on every ticket – active, used, expired, cancelled or not valid yet – with uses remaining.
- Add to Calendar on timeslot tickets, as a normal
.icsfile. - Guest passes handed out from the account page, and a photo upload where a pass asks for one.
Emails
- The WooCommerce order confirmation and completed order emails are extended with ticket, timeslot ticket and pass details.
- Resend Ticket and Resend Pass templates for a re-sent QR code.
- Gifted pass emails: when a buyer enters someone else’s email for a pass, that person receives it. If the address has no account, one is created and they get a link to choose a password.
- Every subject and body is edited in wp-admin and supports merge tags for order and ticket details.
Customer files stay private
QR codes, ticket PDFs and pass photos are not reachable at a guessable public URL. They live in a folder with a random name and are served through the plugin, which checks on every request that the caller holds a signed link from their own email or is signed in as the person the ticket belongs to. Responses are marked private and per-visitor, so a page cache or CDN can never hand one customer’s ticket to the next visitor. Nothing to configure, and it behaves the same on Apache, nginx and IIS.
Privacy
Tickets, timeslot tickets and passes store the holder’s name, and a pass can also store a
cardholder photo and an email used to gift it. Check-in history records the scanning staff member
and when a code was used, not the holder. Gifting a pass to someone else’s email creates them a
customer account if they do not already have one.
The plugin registers a personal data exporter and eraser under Tools > Export/Erase Personal Data.
Erasure anonymises rather than deletes, so check-in history and analytics keep their counts, and a
ticket or pass still valid for an event ahead is retained until it expires.
Nothing to maintain
An hourly background job generates the next batch of recurring timeslots. A per-minute job releases timeslot reservations that were never paid for.
Works with
- WooCommerce HPOS (High-Performance Order Storage) and the block-based cart and checkout.
- Block themes and classic themes.
- Translation ready – every string is translatable, and the plugin ships translations for 25 languages plus a POT file for any other language.
- No build step. All PHP, JavaScript and CSS ships readable and editable.
Requirements
- WooCommerce, installed and active. WordPress will not let the plugin activate without it.
- PHP 8.0 or newer.
- HTTPS, because phone browsers only give camera access to secure pages.
Source Code and Third-Party Libraries
This plugin ships no compiled or obfuscated code. Every PHP, JavaScript and CSS file
written for this plugin is included in readable, editable form, and no build step
(npm, webpack, Composer, etc.) is required to run or modify it.
The following third-party libraries are bundled at the version listed. All are the
upstream distribution files except the Air Datepicker stylesheet, described below:
- dompdf 3.1.6 – PDF rendering – https://github.com/dompdf/dompdf – LGPL-2.1
(bundled in inc/functions/lib/dompdf/, installed with Composer, together with its
dependencies dompdf/php-font-lib 1.0.2, dompdf/php-svg-lib 1.0.2, masterminds/html5
2.10.1, sabberworm/php-css-parser 9.4.0 and thecodingmachine/safe 2.5.0) - endroid/qr-code 4.8.2 – QR code generation – https://github.com/endroid/qr-code – MIT
(bundled in inc/functions/lib/qrcodegen/, installed with Composer, together with its
dependencies bacon/bacon-qr-code 2.0.8 and dasprid/enum 1.0.7) - jsQR 1.4.0 – QR decoding in the check-in scanner – https://github.com/cozmo/jsQR – Apache-2.0
(inc/scanner/js/jsqr.js) - ApexCharts 6.9.0 – charts on the analytics screen – https://github.com/apexcharts/apexcharts.js – MIT
(inc/analytics-dashboard/lib/apexcharts.min.js) - Air Datepicker 3.6.0 – date picker for timeslots – https://github.com/t1m0n/air-datepicker – MIT
(lib/air-datepicker/)
The two Composer-installed libraries can be regenerated from their composer.json with
composer install; the three JavaScript libraries are the unmodified dist files
published by their projects on npm, and their readable sources live in the linked
repositories. The Air Datepicker stylesheet (lib/air-datepicker/css/air-datepicker.css)
is the 3.6.0 dist stylesheet, unminified, with every selector scoped under
.tpfw-datepicker and the unused mobile overlay and global container rules removed;
to regenerate it, take air-datepicker.css from the upstream 3.6.0 dist folder and
prefix its selectors the same way.
Installation
1. Install and activate
In wp-admin go to Plugins > Add New > Upload Plugin, choose the zip and click Install Now, or upload the unzipped folder to /wp-content/plugins/ over FTP. Activate from the Plugins screen with WooCommerce already active. Activation creates the plugin’s database tables and refreshes permalinks, so the My Account tabs and the scanner URL work straight away.
2. Turn on the product types you need
Go to Ticket & Passes > Settings. Tick Enable on the Ticket, Timeslot Ticket and Pass tabs. Anything you leave off stays out of your way.
3. Turn on the scanner
On the Scanner / API tab, make sure the built-in scanner is on. Leave the API off unless an external scanner app will check tickets in; the built-in scanner does not need it. The tab then shows your scanner URL, which is /check-in/ on your own domain.
4. Create a product
Products > Add New, then pick Ticket, Timeslot Ticket or Pass from the Product data dropdown – the same dropdown that holds Simple and Variable. Validity, uses, capacity, recurring schedule and QR design appear below it.
5. Give door staff access
Edit the user under Users and set their role to Scanner. They can then open /check-in/ on a phone and check people in, and see nothing else in wp-admin. Administrators and Shop Managers already have access.
Settings at a glance
Settings live under Ticket & Passes > Settings in six tabs. Only the tabs for the product types you sell need touching.
- General – the date and time format used across the plugin, and the switch for the Analytics screen.
- Ticket – enable the product type, its accent colour and its date picker styling.
- Timeslot Ticket – enable the product type, the date picker hint text, and seven colours for the date and timeslot picker.
- Pass – enable the product type, the hint text above the person fields, and five colours for the per-person cards.
- Scanner / API – the API switch, the built-in scanner switch, the scanner URL, the three scan-result colours, and an API endpoint reference.
- Email – the six editable templates and their merge tags.
Frequently asked questions
Does it need WooCommerce?
Yes. The plugin adds WooCommerce product types and will not activate without WooCommerce active.
Are there any per-ticket fees?
No. There is no external service and nothing to sign up for. You sell through your own WooCommerce checkout, and what you charge is what you keep.
Can I sell tickets and passes in the same shop?
Yes. All three product types can be on at once, and they can sit in the same cart and the same order as your normal products.
Do door staff have to install an app?
No. The scanner is a web page that uses the phone camera. It needs a browser and HTTPS, which is what the camera API requires.
Does the scanner work offline?
No. Every scan is checked against your site as it happens, so the phone needs a connection at the door. That is also why nobody gets a cancelled ticket through by putting the phone in airplane mode.
Who is allowed to check people in?
Users with the Scanner role, and users with the manage_woocommerce capability, which covers Administrators and Shop Managers. The scanner page turns everyone else away.
How do door staff use the scanner?
Give them a user with the Scanner role (Users > edit user > Role). They need no other access. On their phone, open /check-in/ on your site (for example https://example.com/check-in/) and log in. Add the page to the home screen for one-tap access. Allow camera access when the browser asks. The camera only works over HTTPS. Point the camera at the QR code on the ticket or pass. The scanner locks onto the code and shows who it belongs to. Tap Check In to confirm, or Cancel to scan again. The result is shown in the colour you chose on the Scanner / API tab: valid, already used, expired, on…
Can I check people in without a phone?
Yes. Each dashboard in wp-admin has a manual check-in action, so you can find the ticket and let someone in from a computer.
Can I use my own scanner app instead?
Yes. Check-in runs through a REST API, and the endpoints are documented on the Scanner / API settings screen. The built-in scanner page and the API are independent switches, so you can run the API on its own.
Can the same ticket be used twice?
That is up to the product. Each ticket and pass has a maximum number of uses, and passes can have a cooldown so the same code cannot be scanned again immediately.
Is the QR code on its own enough to let someone in?
The QR code identifies the ticket. On passes that carry a photo, staff also see the cardholder photo at check-in and can compare it with the person in front of them.
I run nginx (or IIS). Is anything needed for the private files?
Not for the plugin to work: QR codes, PDFs and photos live under a folder with a random name and are served through the plugin, which checks the caller on every request, so a direct URL is not guessable. On Apache and LiteSpeed the plugin also drops an .htaccess deny into that folder as a second line of defence. You do not need to work this out yourself. Tickets & Passes > Settings > General has a “Private file protection” panel that detects your server and either tells you there is nothing to do, or shows the exact line to paste – click it to select it. nginx and IIS ignore .htaccess, so if…
Does it work with HPOS and the block checkout?
Yes. The plugin declares compatibility with WooCommerce High-Performance Order Storage and with the block-based cart and checkout, and the timeslot date picker works on block themes.
What happens to my data if I delete the plugin?
Settings, scheduled tasks and the Scanner role are removed. Your tickets, passes and check-in records are kept, so removing the plugin to test a conflict cannot wipe a season of admission history. If you do want all of it gone, add this to wp-config.php before you delete the plugin: define( 'TPFW_REMOVE_ALL_DATA', true ); That drops the plugin’s database tables and deletes the generated QR codes, guest passes, PDFs and pass photos. It cannot be undone. Take a backup first.
Can customers print their tickets?
Yes. Every ticket, timeslot ticket and pass has a printable PDF download alongside the QR code on screen, from the Tickets or Passes tab in My Account.
Does deactivating remove anything?
No. Deactivating stops the plugin and clears its scheduled tasks. Settings and records are left alone, and reactivating picks up where you left off.
Changelog
Reliability fixes for refunds, cancels, timeslot holds and the scanner role. No other action needed.
The three most recent releases are below. The full history is in changelog.txt in the plugin folder.
2.1.1
- Security: refunds and revokes that fail on a database error are now retried; an order-screen Cancel that was locked still cancels on retry; deleting a refund restores the codes it had revoked.
- Security: the legacy
scannerrole is only migrated or honoured when this plugin created it. - Fix: a timeslot’s start and end are locked while places are held, not only once sold; cancelling releases a saved hold even if reservations were switched off.
- Fix: the cart’s reservation countdown uses the hold’s own duration; a failed check-in read no longer yields an incomplete privacy export.
2.1.0
- New: picking a timeslot’s start or end time fills the empty other side an hour away (start + 1h, end – 1h) until you edit it yourself.
- Security: cancel and refund revoke every code on a line under the issue and check-in locks, retry when locked, and fail on a failed read; timeslot seats can’t be double-booked; slot and series cancels check database errors.
- Security: scanner API returns correct 401/403 and accepts only a login cookie when off; dashboard PDF links checked per row; pass photos lose EXIF, GPS and XMP data.
- Fix: recurring timeslots generate once per series, follow rule edits, keep cancelled slots cancelled, use ISO weeks; cancelling a series keeps slots that have started.
- Fix: Reset refuses a ticket whose slot was cancelled; transfer emails greet the new holder and hide the buyer’s order number.
- Fix: guest passes, plain-text and failure emails, Add to Calendar, daylight-saving reservations, type-off behaviour, Privacy tools, My Account, scanner camera states, analytics year, gift accounts, #rgb colours and limit validation.
- Fix: network activation and deactivation cover every site and require WooCommerce on each.
- Accessibility: labelled guest pass dialog, labelled settings fields, text equivalents for analytics charts.
- Performance: dashboard and CSV queries load orders per page in one read; assets are versioned by plugin version; datepicker CSS is scoped under
.tpfw-datepicker.
1.6.1
- New: translations for 23 more languages – Arabic, Chinese (Simplified and Traditional), Czech, Dutch, Finnish, French, German, Greek, Hungarian, Icelandic, Indonesian, Italian, Japanese, Korean, Norwegian (Bokmål), Polish, Portuguese (Brazil), Romanian, Russian, Spanish, Turkish and Ukrainian. They are machine translations with a hand review of plurals and formatting; corrections are welcome on translate.wordpress.org, where a community translation still wins over the one shipped here.
- Fix: the Danish and Swedish translations now cover the strings added in 1.6.0, which were showing in English.
- Fix: every shipped translation now declares its language’s plural rules, so counts such as “3 spots left” use the correct word form in languages with more than two forms.
Older releases: see changelog.txt.
Screenshots
For developers
Is this your plugin? Show off the numbers.
Add a live badge to your site, docs or GitHub README. It updates on its own — no account needed.
Best Tickets & Passes for WooComme… alternatives
All Event Tickets plugins →FAQ
Tickets & Passes for WooCommerce: quick answers
Straight answers, pulled from live WordPress.org data.
Live data from WordPress.org · checked Oct 21, 2026
Is Tickets & Passes for WooCommerce free?
Yes. Tickets & Passes for WooCommerce is free to download and use from the official WordPress.org plugin directory.
Is Tickets & Passes for WooCommerce safe to use in 2026?
Tickets & Passes for WooCommerce is a solid plugin choice in 2026, with a few things worth checking first. It runs on 10+ sites and was last updated 3 days ago, and scores 66/100 on our health check.
How many websites use Tickets & Passes for WooCommerce?
Tickets & Passes for WooCommerce is active on 10+ WordPress websites and has been downloaded 607 times since it launched in August 2026. It was downloaded 228 times in the last 30 days.
Does Tickets & Passes for WooCommerce work with WordPress 7.1?
Yes. The developer has tested Tickets & Passes for WooCommerce up to WordPress 7.1.3, the latest release. It requires WordPress 6.5 or newer.
What PHP version does Tickets & Passes for WooCommerce need?
Tickets & Passes for WooCommerce requires PHP 8.0 or higher. Most hosts run PHP 8.x today, so it works on any modern WordPress hosting.
When was Tickets & Passes for WooCommerce last updated?
The latest version, 2.1.1, was released on October 17, 2026 (3 days ago).
Who makes Tickets & Passes for WooCommerce?
Tickets & Passes for WooCommerce is developed and maintained by Mac.
What are the best alternatives to Tickets & Passes for WooCommerce?
The most popular alternatives to Tickets & Passes for WooCommerce are Sugar Calendar (10K+ installs), Eventin (10K+ installs) and Event Booking Manager for W… (7K+ installs).
Powered by PageForge
Want thousands of pages that rank like these? Build them in an afternoon.
This directory runs on the same engine as PageForge. Turn any spreadsheet, CSV or API into thousands of fast, SEO-ready WordPress pages — with schema, internal links and AI-written copy baked in.
- CSV, Google Sheets & API data sources
- AI content, schema & internal links per page
- Works with Elementor, Gutenberg, Yoast & Rank Math
- Free on WordPress.org — no credit card