Title: Tempo Book It Box Office
Author: Tempo Book It
Published: <strong>September 10, 2026</strong>
Last modified: September 11, 2026

---

Search plugins

![](https://ps.w.org/tempo-book-it-box-office/assets/banner-772x250.png?rev=3689696)

![](https://ps.w.org/tempo-book-it-box-office/assets/icon-256x256.png?rev=3689696)

# Tempo Book It Box Office

 By [Tempo Book It](https://profiles.wordpress.org/garethtempo/)

[Download](https://downloads.wordpress.org/plugin/tempo-book-it-box-office.1.1.4.zip)

 * [Details](https://wordpress.org/plugins/tempo-book-it-box-office/#description)
 * [Reviews](https://wordpress.org/plugins/tempo-book-it-box-office/#reviews)
 *  [Installation](https://wordpress.org/plugins/tempo-book-it-box-office/#installation)
 * [Development](https://wordpress.org/plugins/tempo-book-it-box-office/#developers)

 [Support](https://wordpress.org/support/plugin/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](https://tempo-book-it.com/box-office-pro/) · [Pro Preview](https://playground.wordpress.net/?blueprint-url=https://tempo-book-it.com/playground/box-office-pro.json)(
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

[⌊The seat picker: pick seats on the map or from the list, with your own brand colours.⌉⌊
The seat picker: pick seats on the map or from the list, with your own brand colours
.⌉[

The seat picker: pick seats on the map or from the list, with your own brand colours.

[⌊Checkout: choose a ticket type per seat, pay by card or PayPal, no booking fees.⌉⌊
Checkout: choose a ticket type per seat, pay by card or PayPal, no booking fees.⌉[

Checkout: choose a ticket type per seat, pay by card or PayPal, no booking fees.

[⌊The seat map builder: rows and seats, bulk attributes, price bands and a live 
preview.⌉⌊The seat map builder: rows and seats, bulk attributes, price bands and
a live preview.⌉[

The seat map builder: rows and seats, bulk attributes, price bands and a live preview.

[⌊Performances: on-sale times that flip themselves, snapshots per performance.⌉⌊
Performances: on-sale times that flip themselves, snapshots per performance.⌉[

Performances: on-sale times that flip themselves, snapshots per performance.

[⌊Orders: check people in, resend tickets, refund in a click.⌉⌊Orders: check people
in, resend tickets, refund in a click.⌉[

Orders: check people in, resend tickets, refund in a click.

[⌊Branding and vocabulary, with a live preview of the buyer's view.⌉⌊Branding and
vocabulary, with a live preview of the buyer's view.⌉[

Branding and vocabulary, with a live preview of the buyer’s view.

[⌊The Door screen: the attendee list on show night, and what a scanned ticket QR
opens.⌉⌊The Door screen: the attendee list on show night, and what a scanned ticket
QR opens.⌉[

The Door screen: the attendee list on show night, and what a scanned ticket QR opens.

## 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

 *   [ Tempo Book It ](https://profiles.wordpress.org/garethtempo/)

[Translate “Tempo Book It Box Office” into your language.](https://translate.wordpress.org/projects/wp-plugins/tempo-book-it-box-office)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/tempo-book-it-box-office/),
check out the [SVN repository](https://plugins.svn.wordpress.org/tempo-book-it-box-office/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/tempo-book-it-box-office/)
by [RSS](https://plugins.trac.wordpress.org/log/tempo-book-it-box-office/?limit=100&mode=stop_on_copy&format=rss).

## 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.

## Meta

 *  Version **1.1.4**
 *  Last updated **19 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.4 or higher **
 *  Tested up to **7.1**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [box office](https://wordpress.org/plugins/tags/box-office/)[events](https://wordpress.org/plugins/tags/events/)
   [Seating Chart](https://wordpress.org/plugins/tags/seating-chart/)[ticketing](https://wordpress.org/plugins/tags/ticketing/)
   [tickets](https://wordpress.org/plugins/tags/tickets/)
 *  [Advanced View](https://wordpress.org/plugins/tempo-book-it-box-office/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/tempo-book-it-box-office/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/tempo-book-it-box-office/reviews/)

## Contributors

 *   [ Tempo Book It ](https://profiles.wordpress.org/garethtempo/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/tempo-book-it-box-office/)