Tempo Book It Box Office

Description

Tempo Book It Box Office lets venues, theatres, schools and community groups sell tickets from their own WordPress site. Choose reserved seating with a visual seat picker, or general admission with a capacity limit. No booking fees, no third-party platform between you and your audience.

Built for the on-sale rush. Event pages are fully cacheable and availability comes from one small endpoint, so a busy 9am does not fall over. Seats are held for ten minutes while people pay, and the database itself guarantees a seat can never be sold twice.

What you get

  • Reserved seating with a visual seat picker, or capacity-limited general admission
  • A seat map builder: rows and seats, aisles, price bands, accessible and restricted-view seats, blocked seats
  • Reusable venue maps. Each performance sells against its own snapshot, so editing a venue never changes shows already on sale
  • Time-limited seat holds with a courtesy countdown; expiry is enforced by the server
  • Guest checkout with Stripe or PayPal, and no booking fees
  • PDF tickets with QR codes, including a party pass for group bookings, plus a calendar file
  • Check-in that works with any phone: scanning a ticket’s QR code with the camera opens that booking on the Door screen, ready to check in
  • A Door screen for show night: the attendee list per performance with search, mark in and undo, and a Tempo door role for stewards who should see nothing else
  • Orders: resend tickets, refund in a click, check people in from the order too
  • Cancel a performance and every buyer is refunded and emailed automatically
  • Reports: revenue, tickets sold and capacity per performance
  • A what’s-on grid for any page or post via the [tempo_box_office_events] shortcode (add title=”” to drop its heading); event pages themselves appear automatically
  • Branding and vocabulary: your colours and logo, rename the words buyers see (Performance, Seat, Attendee, Ticket and more), and edit or hide the selling points shown to buyers
  • Accessible by design: WCAG 2.1 AA, full keyboard support on the seat picker, and a list view that does everything the map does

Tempo Book It Box Office Pro

An optional add-on brings a drag-and-drop seat designer (curved rows, tables, zones, per-seat control), a dedicated check-in scanner that scans continuously in the page with offline queueing, box office sales with cash, card terminal and Stripe card readers, promo codes, a soft queue for big on-sale days, and deeper reports with CSV export. The free plugin is complete on its own and stays that way.

Find out more · Pro Preview (a throwaway WordPress in your browser with the free plugin, Pro and a seeded box office; nothing to install, and it resets when you close the tab).

External services

This plugin connects to a payment provider only when a buyer chooses to pay, and only if you have entered that provider’s keys in Settings. Nothing is sent anywhere otherwise, and the plugin contains no tracking or analytics.

Stripe is used to take card payments when you configure Stripe keys. When a buyer pays, the order amount, currency, order number and the buyer’s email address are sent to Stripe so it can process and receipt the payment. Card details are entered directly into Stripe’s own fields and never reach your site. The settings screen’s “Save & test connection” and “Save & set up webhook” buttons also call Stripe with your secret key, to verify the credentials and to create the webhook endpoint for you. Terms: https://stripe.com/legal/ssa · Privacy: https://stripe.com/privacy

PayPal is used to take payments when you configure PayPal keys. When a buyer chooses PayPal, the order amount, currency and order reference are sent to PayPal, and the buyer completes payment on PayPal’s site before returning. The settings screen’s “Save & test connection” button calls PayPal with your credentials to verify them. Terms: https://www.paypal.com/legalhub/useragreement-full · Privacy: https://www.paypal.com/legalhub/privacy-full

Stripe.js (https://js.stripe.com/v3/) is loaded on the checkout page when Stripe is your chosen payment method. This is required by Stripe so that card details are captured by Stripe rather than by your site.

Screenshots

Installation

  1. Install and activate the plugin.
  2. Follow the setup wizard, or go to Tempo Book It Box Office and set things up yourself.
  3. Add a venue and draw its seat map, or skip it if you only sell general admission.
  4. Add your ticket types (Adult, Child, Concession and so on).
  5. Enter your Stripe or PayPal keys under Tempo Book It Box Office, Settings, Payments.
  6. Create an event, then add its performances: a date and time, the venue map or a capacity, an on-sale date (set it to now to sell straight away, or a future moment and sales open themselves) and at least one price per band.
  7. On show night, give your stewards the Tempo door role: they log in on any phone and check people in from the Door screen.

We recommend an SMTP plugin so ticket emails always arrive.

FAQ

Can two people buy the same seat?

No. A unique database index makes it impossible for a seat to be sold twice, however many people click at the same moment. The loser of a race is told immediately and the map updates.

What happens if someone abandons a checkout?

Their seats are held for ten minutes and then go back on sale automatically. The countdown buyers see is a courtesy; the server decides.

Does it work on a busy on-sale day?

Event and countdown pages are fully cacheable and do no database writes, and live availability comes from one small cached endpoint. On-sale times flip themselves at the appointed moment, so nobody has to press publish at 9am.

Can I tidy up old venues and performances?

Yes. A venue that no performance uses can be binned from the Venues screen; one that is still in use says so. Cancelled and past performances can be removed from the event’s performances list; their orders and reports are kept. Binning or deleting an event takes its performances with it.

How does check-in work at the door?

Give your stewards the Tempo door role (or one shared login). They log in and land on the Door screen: the attendee list for the next performance, with search and one-tap mark in. Scanning the QR code on any ticket with an ordinary phone camera opens that booking on the same screen, and the party pass QR checks a whole group in at once. Door users see nothing else: no orders, prices or buyer emails.

Can I change the words it uses?

Yes. Performance, Seat, Attendee, Ticket, Venue, Section, Row and Event can all be renamed under Settings, Branding and vocabulary, and your words are used everywhere buyers look, including emails and PDF tickets.

What happens to my data if I uninstall?

Nothing is deleted unless you opt in first under Settings, Privacy. Buyer data also plugs into the WordPress privacy tools for export and erasure, and you can set a retention period after which attendee details are anonymised automatically.

Do I need Pro?

No. The free plugin sells tickets end to end, including QR check-in with a phone camera. Pro adds capabilities such as the drag-and-drop designer and a dedicated continuous scanner; it never unlocks something already installed.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Tempo Book It Box Office” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

1.1.4

  • Live Preview: the sandbox’s home page is now the what’s-on grid (a “What’s on” page set as the front page, sample content binned), so Visit site from the admin lands on the events.
  • Shortcode: [tempo_box_office_events title=""] hides the grid’s own heading; any other value replaces it.
  • Readme: Find out more and Pro Preview links for the Pro add-on.

1.1.3

  • Live Preview: the wordpress.org listing can open a seeded sandbox in the browser (WordPress Playground): a venue with curved rows and a table, Cinderella with performances tomorrow and the day after (one not on sale yet, one in the past with everyone checked in), a general admission Karate competition, orders, holds and check-ins, plus manager and door logins. For your own sandboxes: wp tempo-box-office demo-seed, or set the TEMPO_BOX_OFFICE_DEMO_SEED constant and call the seeder; it never runs on a real site by accident and running it twice does nothing.
  • Sandbox mode (TEMPO_BOX_OFFICE_DEMO constant, set by the Playground blueprints only): a sandbox payment method that settles instantly so checkout produces a real PDF ticket with a QR code, no email leaves the site and the confirmation page says so, and the Stripe and PayPal settings are replaced by a note. Nothing changes on ordinary sites.
  • For add-ons: the tempo_box_office_demo_seeded action fires after the demo story is built, with every id it created.

1.1.2

  • Block themes: an Event single template and an Events archive template are supplied when the theme has none of its own, so the event page, seat picker, checkout and confirmation render on any block theme. Both can be edited in the Site Editor.
  • Seat picker: each price band can carry its own colour (set by Tempo Book It Box Office Pro); bands beyond three no longer repeat the first three colours.
  • Themes can brand from the plugin: template functions for the brand colours, their contrast text, the logo and the business name from Settings.
  • Admin: Performances keeps the menu open with Events highlighted; the Door tab leaves the manager header (TBI Door stays in the sidebar); help text keeps its spacing.

1.1.1

  • Admin: new TBI Box Office header graphic, the TBI ticket mark as the sidebar icon, and a small Tempo Book It footer on every screen.
  • Checkout: a promo code box appears when an add-on offers codes; the discount and code are stored on the order and shown in Orders. For add-ons: the tempo_box_office_order_pricing filter adjusts an order’s price (or refuses it) before it is created, tempo_box_office_promo_codes_enabled shows the box, and POST /pricing/quote prices a basket without creating anything. Database update 3 adds the discount columns (runs automatically).

1.1.0

  • Renamed to Tempo Book It Box Office at the request of the WordPress.org plugin review, to avoid confusion with an unrelated ticketing service; the text domain is now tempo-book-it-box-office. The WordPress sidebar shows the short forms TBI Box Office and TBI Door. Nothing about how the plugin works changed. Includes everything under 1.0.3, which was never published.

1.0.3

  • Seat maps: the save route now keeps the geometry the map schema reserves for add-ons (curved rows, tables, free positions and rotation), within bounds, so a plan drawn in Tempo Book It Box Office Pro round-trips through the same snapshot mechanism. Nothing changes for maps from the grid builder.
  • Seat picker: add-ons can register a map renderer for plans with geometry; without one, such plans are laid out as plain rows.
  • Seats can carry a display label distinct from their id, shown on tickets and in the basket.
  • Venues: the “Edit map” link is filterable; the grid builder warns before overwriting a plan drawn with geometry and links to the add-on’s designer when one is installed.
  • Seat picker: the mouse wheel or trackpad zooms the plan, with a “Scroll zoom” switch in the toolbar for buyers who would rather scroll the page. Plans with geometry open centred on the seats at a readable size instead of shrunk to the whole room.
  • Seat picker: tables are called tables (not rows) in the list view and screen-reader labels; the basket and checkout show the seat’s display label (A11, T1-3) rather than its internal id.
  • Seat maps: display options (seat numbers, seat text style, row letters), per-row numbering rules, stage shape and text landmarks (exits, bar) are kept for add-ons that draw positioned plans. The free builder and picker ignore them.
  • Admin screens: every fragment of HTML is now escaped at the point it is printed (badges, action forms, nav icons), with no suppressed checks left except the raw PDF and calendar downloads.
  • Check-in: a scan can record when it really happened (for scanners that queue while offline); the door name is capped at the column length. Door staff who ask for a specific page after logging in are sent there rather than to the door list.
  • For add-ons: the seat picker’s markup and config can be hosted on other screens (PickerPage::markup() / enqueue()), and hold requests carry the REST nonce when one is configured; new filters tempo_box_office_nav_items, tempo_box_office_enforce_on_sale and tempo_box_office_order_requires_email, and the tempo_box_office_door_toolbar action.

1.0.2

  • Door: the party pass QR is now looked up by an indexed column on the order (a small database update runs automatically on the first page load), so a scan stays instant however many orders a site has. Passes on orders paid before the update still work.
  • Holds: seat requests are budgeted per client address (300 a minute by default, adjustable with the tempo_box_office_hold_budget filter) so a script cannot hoard a whole show while ordinary buyers, including many behind one office or mobile network address, are unaffected.
  • Housekeeping: abandoned checkouts (pending or failed orders with no tickets, older than a week) are removed by the daily job; sales and refunds are never touched.
  • Seat picker: availability updates are applied in the order they were requested, so a slow response can no longer briefly show a just-taken seat as free; if the seating plan fails to load, the page says so and offers a retry instead of loading forever.
  • Countdown page: the on-sale countdown corrects its clock from the live availability endpoint, so a page served from a cache still opens sales on time.

1.0.1

  • Vocabulary: renamed terms now reach everywhere – the admin menu and navigation, the venues screen, back links, the seat list view and the default buyer copy lines, which follow your words until you customise them.
  • Theme compatibility: the colour token layer now loads on classic themes too; previously seats, buttons and legends lost all styling outside block themes.
  • Seat picker: clicking a seat shows a spinner on it until the hold is confirmed, and focus rings follow the seat’s rounded shape.
  • Setup wizard: opens automatically on a fresh install with no data (once, with a Close setup link that remembers the choice).
  • Setup wizard: the first-event step takes a ticket price; with one the event goes live ready to sell, without one it is saved as a draft. A performance with no prices can never be on sale, whichever screen created it.
  • Setup wizard: the payments step carries the same Stripe walkthrough as Settings, and entering keys creates the Stripe webhook automatically.

1.0.0

  • Payments: a card payment that Stripe confirms but the site cannot immediately verify is now held in a “confirming” state and polled until it settles; buyers are never told “no money was taken” after a successful charge, and a retry can no longer create a second charge. Payments still in flight (3D Secure, processing) are no longer treated as declined.
  • Payments: an order that is paid after every seat was lost to another buyer is refunded automatically and logged.
  • Holds: refreshing the checkout page no longer tops the hold back up to ten minutes; the countdown shows the real time left. General admission checkout reuses its existing hold on refresh instead of claiming more tickets, and a basket is capped at the per-request maximum.
  • Holds: quick successive seat clicks in a fresh session now all land under one hold key; a failed release puts the seat back in the basket.
  • Security: the general-admission checkout endpoint validates quantities before processing them; attendee CSV exports neutralise spreadsheet formulas; refund, resend, check-in and venue actions are POST requests; seat maps are sanitised on save; performance edits are bound to the event they belong to.
  • Roles: the Tempo manager role can now add, edit and bin events and pick a logo from the media library.
  • Admin: the performance form shows the price bands of the venue actually selected and requires a date, an on-sale date and at least one price per band; prices must be numbers of zero or more; wizard and builder grid sizes are bounded; unused venues can be binned; cancelled or past performances can be removed; binning or deleting an event now takes its performances with it.
  • Admin: order totals cover the whole filter rather than the latest 100 rows; the Door screen distinguishes an invalid ticket from one already checked in; “Tickets resent” is only reported when the email was sent.
  • Refunds: double-submitted refunds reach the gateway once (Stripe requests carry idempotency keys); a cancellation whose refunds keep failing backs off and stops with an audit entry instead of retrying for ever.
  • Privacy: the retention sweep no longer re-processes already anonymised orders; the “delete data on uninstall” setting now works and removes every option the plugin created.
  • Accessibility: the seat picker keeps keyboard focus on the seat after each selection, announces selections, and moves focus to the restart button when a hold ends.
  • Reliability: ticket PDFs and QR codes degrade gracefully on hosts without the GD extension instead of failing after payment.
  • Developers: the Gateway interface gained a read-only status() method; gateway references are stored on the order row; a PHPUnit suite ships in the development repository.

0.2.0

  • First public release: events and performances, reserved seating and general admission, seat map builder, seat picker with holds, Stripe and PayPal checkout, PDF tickets with QR codes, the Door screen with phone-camera QR check-in and a door staff role, orders, refunds and cancellations, reports, branding and vocabulary with editable buyer copy, a what’s-on shortcode, setup wizard, GDPR tools.