| 开发者 | macvej |
|---|---|
| 更新时间 | 2026年11月10日 07:16 |
| PHP版本: | 8.0 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
/check-in/. Full screen, no admin bar, nothing for door staff to get lost in.manage_woocommerce; nobody needs an Administrator account to run the door..ics file./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.
Yes. The plugin adds WooCommerce product types and will not activate without WooCommerce active.
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.
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.
Yes. The Pass product type is valid across a period rather than a single visit: season passes, memberships and annual cards. A pass can include guest passes the holder gives away, carry a cardholder photo, and enforce a cooldown between scans.
Yes. A Timeslot Ticket has a capacity per slot. Capacity is checked when the item is added to the cart, and unpaid reservations are released automatically, so an abandoned checkout never holds a seat.
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.
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.
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.
/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.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.
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.
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.
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.
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 you want the same belt-and-braces there, add this inside the server { } block that serves WordPress and reload nginx:
location ^~ /wp-content/uploads/tpfw- { deny all; }
It blocks direct HTTP to the plugin's upload folders only - not the rest of the media library, and not the plugin's own file route, which is PHP.
On IIS, the equivalent goes in web.config as a URL Rewrite rule:
<rule name="TPFW deny static tpfw uploads" stopProcessing="true"><match url="^wp-content/uploads/tpfw-" /><action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" /></rule>
Leave index.php?tpfw_file=... alone in both cases - that is the route customers' links actually use.
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.
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.
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.
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.txt in the plugin folder.
2.1.1
scanner role is only migrated or honoured when this plugin created it..tpfw-datepicker.changelog.txt.