Escape Room Booking Pro

The complete WordPress booking plugin for escape room venues. Take bookings, collect payments, and manage your games — all from your own website.

Version 1.3.27 WordPress 6.0+ PHP 7.4+ Stripe Payments

Requirements

Before installing, make sure your hosting meets these requirements:

RequirementMinimumNotes
WordPress6.0Tested up to 6.7
PHP7.48.0+ recommended
MySQL5.7Or MariaDB 10.3+
Stripe AccountRequiredFree to create at stripe.com
HTTPSRequiredStripe requires SSL on your site
Outbound HTTPRequiredFor Stripe API and licence validation

Installation

Download the plugin zip using the download link in your purchase email from escaperoombookingpro.com. The file will be named escape-room-booking-pro-latest.zip.

Upload to WordPress. Go to Plugins → Add New → Upload Plugin, choose the zip file and click Install Now.

Activate the plugin. Click Activate Plugin. You will see a new Escape Rooms menu in your WordPress admin sidebar.

Activate your licence. Go to Escape Rooms → Licence and enter the licence key from your purchase confirmation email.

Follow the Quick Start guide below to complete setup.

⚠️

Updating the plugin: Always deactivate your licence before updating if prompted. Go to Escape Rooms → Licence → Deactivate, update the plugin, then re-enter your key. Your booking data is never affected by updates.

⚠️

Upgrading from the free Lite version: If you previously had the free Escape Room Booking (Lite) plugin installed, deactivate it but do not delete it before installing Pro. Both versions share the same database tables — deleting the Lite plugin may remove all your booking data, games, rooms and settings. Once Pro is installed and confirmed working, you can safely delete Lite.

Licence Activation

Escape Room Booking Pro uses a single-site licence. One purchase covers one WordPress installation.

Go to Escape Rooms → Licence in your WordPress admin.

Paste your licence key into the field. Keys are in the format XXXXX-XXXXX-XXXXX-XXXXX-XXXXX.

Click Activate Licence. You should see a green "Licence Active" confirmation.

ℹ️

Moving to a new site? Go to Escape Rooms → Licence → Deactivate on the old site first, then activate on the new site. This releases your activation so it can be used elsewhere.

Quick Start

Follow these steps in order to get your first game live and taking bookings.

Add your Stripe keys. Go to Escape Rooms → Settings → Payments. Add your Stripe test keys first, then go live when you're ready. You'll find your keys in your Stripe Dashboard.

Create your WordPress pages. Create three new pages in WordPress:

  • A Book Now page — add the shortcode [eerb_booking]
  • A Games or calendar page — add the shortcode [eerb_calendar game="your-game-slug"]
  • A Manage Booking page — add the shortcode [eerb_manage_booking]

Enter your page URLs. Go to Escape Rooms → Settings → Pages and enter the URLs of the three pages you just created.

Add a room. Go to Escape Rooms → Games → Rooms and add your first room (e.g. "Room 1").

Add a game. Go to Escape Rooms → Games → Add Game. Fill in the name, duration, player count, opening hours and prices. Set the slug — this is used in the calendar shortcode.

Update your calendar shortcode. On your games/calendar page, update the shortcode to use your game's slug: [eerb_calendar game="your-game-slug"].

Test a booking. Visit your calendar page. You should see available slots. Click a slot and complete a test booking using Stripe's test card number 4242 4242 4242 4242, any future expiry date, and any 3-digit CVC.

Go live. When you're happy everything works, go to Settings → Payments, switch to Live mode and enter your live Stripe keys. Set up your Stripe webhook (see the Stripe section below).

Stripe Payments

API Keys

You need both a Publishable Key and a Secret Key from your Stripe Dashboard. The plugin has separate fields for Test and Live keys so you can switch between them easily.

  1. Log into dashboard.stripe.com
  2. Go to Developers → API Keys
  3. Copy both the Publishable Key (pk_test_...) and Secret Key (sk_test_...)
  4. Paste them into Escape Rooms → Settings → Payments

Webhook Setup

The webhook tells your site when a payment has been confirmed by Stripe. This is essential for bookings to be confirmed automatically.

  1. In your Stripe Dashboard go to Developers → Webhooks → Add Endpoint
  2. Enter your webhook URL: https://yoursite.com/?erb_action=stripe_webhook
  3. Select the event: payment_intent.succeeded
  4. Click Add Endpoint and copy the Signing Secret (whsec_...)
  5. Paste it into Escape Rooms → Settings → Payments → Webhook Secret
💡

Testing tip: Use a 99% promo code during testing to minimise charges. A 100% discount is not supported as Stripe requires a minimum charge amount.

Going Live

When you are ready to accept real payments, go to Settings → Payments, toggle the mode to Live, and enter your live Stripe keys. Set up a separate webhook endpoint for live mode — it has the same URL but needs its own signing secret from the Live mode webhook in your Stripe Dashboard.

WordPress Pages

The plugin uses three WordPress pages. You create these yourself and tell the plugin where they are in Settings.

[eerb_calendar game="your-slug"]

Games / Calendar page — shows a weekly availability calendar for a specific game. Visitors click a slot to begin booking. You can have one calendar page per game, or multiple games on the same page.

Replace your-slug with the slug you set when creating the game in Escape Rooms → Games.

[eerb_booking]

Booking page — the 3-step booking flow (details → payment → confirmation). Customers are redirected here automatically when they click a calendar slot. You only need one booking page regardless of how many games you have.

[eerb_manage_booking]

Manage Booking page — allows customers to view their booking, change the number of players, or cancel. The link to this page is included in all confirmation emails automatically.

ℹ️

After creating these pages, go to Escape Rooms → Settings → Pages and enter each page's full URL. This is how the plugin knows where to send customers and where to link in emails.

All Settings

All settings are found under Escape Rooms → Settings.

Pages

SettingDescription
Booking Page URLURL of the page containing [eerb_booking]
Manage Booking Page URLURL of the page containing [eerb_manage_booking]
Calendar Home URLURL of your games listing page. Used for "Go to Calendar" and "Book Again" buttons
Date Display FormatPHP date format used throughout the plugin. Default: j F Y (27 March 2026)

Payments

SettingDescription
ModeTest or Live. Always test first before going live
Test Publishable KeyYour Stripe test public key (pk_test_...)
Test Secret KeyYour Stripe test secret key (sk_test_...)
Live Publishable KeyYour Stripe live public key (pk_live_...)
Live Secret KeyYour Stripe live secret key (sk_live_...)
Webhook SecretThe signing secret from your Stripe webhook endpoint
Currency SymbolSymbol shown on prices, e.g. £, $, €

Emails

SettingDescription
Admin EmailWhere booking notifications are sent. Defaults to WordPress admin email
From NameThe name shown in the From field of customer emails
From AddressThe email address customer emails are sent from

Availability

SettingDescription
Slot Hold MinutesHow long a slot is held while a customer completes payment. Default: 15 minutes
Allow Online Booking ManagementWhen checked (default), confirmation emails include a "Manage My Booking" link allowing customers to change player count or cancel online. Uncheck to remove this link — customers must contact you directly for changes.
Available ColourColour of available slots on the calendar
Booked ColourColour of unavailable slots on the calendar

Games

A Game is one of your escape room experiences. Each game is assigned to a Room and has its own hours, pricing and availability settings.

Adding a Game

Go to Escape Rooms → Games and click Add Game. Fill in:

FieldDescription
NameThe public name of your game, e.g. "The Lost Laboratory"
SlugURL-friendly identifier used in the calendar shortcode, e.g. lost-laboratory
RoomThe physical room this game takes place in
DurationPlaying time in minutes, e.g. 60
Setup TimeBuffer between slots in minutes, e.g. 15
Min / Max PlayersThe allowed range of players per booking
Min Notice HoursHow far in advance a booking must be made, e.g. 2 hours
Booking HorizonHow far in advance bookings can be made, e.g. 90 days
DescriptionShort description shown above the calendar

Opening Hours

Set opening and closing times for each day of the week. Mark days as Closed to block them entirely. The plugin automatically generates available slots based on your duration and setup time.

Pricing

Set a price per player count. For example: 2 players = £50, 3 players = £65, 4 players = £80. Every player count between your minimum and maximum must have a price set.

Shared Rooms

If two different games share the same physical room, assign them both to the same Room. The plugin will automatically block slots in both games when one is booked — preventing double bookings.

Bookings

Go to Escape Rooms → Bookings to see all bookings. You can filter by status, game, and date range.

Booking Statuses

StatusMeaning
ConfirmedPayment received, booking is live
PendingPayment intent created but not yet confirmed by Stripe
ChangedCustomer has changed their player count
CancelledBooking has been cancelled by customer or admin

Viewing a Booking

Click View on any booking to see full details including the customer's name, email, mobile, Stripe payment ID, and booking history.

Cancelling a Booking

Click Cancel on a confirmed booking. The customer will receive a cancellation email automatically. Refunds must be processed manually via your Stripe Dashboard.

⚠️

Refunds: The plugin does not process refunds automatically. When a booking is cancelled, log into your Stripe Dashboard and issue the refund from there.

Customers

Go to Escape Rooms → Customers to see everyone who has booked. The plugin maintains its own customer database separate from WordPress users.

Customers can book as guests (no account) or create a customer account to log in and view all their bookings in one place. Both types are shown in the customers list.

Each customer record shows their name, email, number of bookings, and total amount spent.

Promo Codes

Go to Escape Rooms → Promo Codes to create discount codes. Customers enter codes at the payment step of the booking flow.

FieldDescription
CodeThe code customers type in, e.g. SUMMER20. Case-insensitive.
Discount %Percentage discount, 1–99%. Cannot be 100% (Stripe minimum charge applies).
DescriptionInternal note for your reference. Not shown to customers.
Valid From / ToOptional date range. Leave blank for no date restriction. Date validation is based on the purchase date (when the customer pays), not the booking date. A "Book in May" promotion will apply to any purchase made in May, even if the booking slot is in June.
Max UsesOptional limit on total uses. Leave blank for unlimited.
ActiveToggle to enable or disable a code without deleting it.

The status column automatically shows Active, Expired, Not Yet Active, Limit Reached, or Disabled based on the current date and use count.

Gamekeepers

Go to Escape Rooms → Gamekeepers to add staff members who should receive booking notification emails.

By default, booking notifications go to the Admin Email set in Settings. Adding gamekeepers sends notifications to those addresses in addition to the admin email.

Each gamekeeper has a name, email address, and an Active toggle. Inactive gamekeepers do not receive emails.

iCal Calendar Feeds

Each gamekeeper has a personal iCal feed URL shown on the Gamekeepers page. They can subscribe to this URL in Apple Calendar (iPhone/Mac) or Thunderbird to see all upcoming confirmed bookings automatically on their phone. The feed updates in real time and shows bookings for the next 90 days.

An Admin iCal Feed covering all bookings is available in Settings → Admin iCal Feed.

Note: Google Calendar support is limited — if bookings don't appear within 24 hours, use Apple Calendar or Thunderbird instead.

Gamekeeper Slot Management

Gamekeepers can block and unblock time slots directly from their smartphones — no login required, no app to install. Go to Settings → Gamekeeper Slot Management to find the shared management URL. Copy this URL and send it to your gamekeepers to bookmark on their phones.

The management page shows all active games and their slots for the current week. Gamekeepers can tap any slot to block it (preventing online bookings) or tap again to unblock it. Booked slots cannot be unblocked.

Security: The URL contains a unique token that acts as a password. Keep it private — only share it with trusted staff. If a gamekeeper leaves or you suspect the URL has been shared inappropriately, click New Token in Settings to instantly generate a new URL. The old URL stops working immediately. You can then share the new URL with your remaining gamekeepers.

Note: the iCal URL is separate and individual — each gamekeeper has their own personal iCal feed URL (shown on the Gamekeepers page). Deleting a gamekeeper automatically invalidates their personal iCal URL — the server immediately returns an access denied error for any request using that URL. However, calendar apps on smartphones (Apple Calendar, Thunderbird etc.) cache iCal data and only refresh periodically. This means a deleted gamekeeper's phone calendar may continue to show previously cached booking data for a few hours until their app next attempts to refresh the feed. At that point it will receive an access denied error and stop updating. No new booking data will be accessible once the gamekeeper is deleted — only cached historical data may remain temporarily visible on their device.

Shortcode

The gamekeeper management page requires a WordPress page containing the shortcode [eerb_gamekeeper]. Create this page, keep it published but do not add it to your navigation menu. The URL in Settings will update automatically once the page exists.

Reports

Go to Escape Rooms → Reports to see revenue and booking statistics.

Summary Stats

The top row shows for your selected date range: total revenue, confirmed bookings, cancellations, total players, promo discounts given, and average booking value.

Date Range

Use the date pickers to set a custom range, or use the quick presets: This Month, Last Month, This Year, All Time.

Revenue by Game

A breakdown of confirmed bookings and revenue per game — useful if you run multiple rooms.

Promo Code Usage

Shows how many times each promo code was used and the total discount given.

Shortcodes

[eerb_calendar game="slug"]

Displays the availability calendar for a game. The game attribute must match the slug of one of your games.

You can display multiple games on the same page using multiple shortcodes:

[eerb_calendar game="the-lost-laboratory"]
[eerb_calendar game="the-haunted-manor"]
[eerb_booking]

Displays the 3-step booking flow. Place this on its own dedicated page. Customers are sent here automatically when they click a slot on the calendar — you don't need to link to it manually.

[eerb_manage_booking]

Displays the manage booking page where customers can view their booking details, change the number of players, or cancel. The link to this page is included automatically in all confirmation emails unless disabled in Settings → General → Allow Online Booking Management.

[eerb_gamekeeper]

Displays the gamekeeper slot management page. Place this on a dedicated page that is published but not in your navigation menu. Access is controlled by a secure token in the URL — share the full URL (found in Settings) with your gamekeepers.

Calendar

The calendar shows a weekly view of available and unavailable slots for a game. Customers can navigate forward and backward by week.

Slot Colours

You can customise the available and unavailable colours in Settings → Availability. The defaults are green (available) and red (unavailable).

How Availability Works

  • Slots are generated automatically from your opening hours, duration and setup time
  • Slots within the minimum notice period show as 📞 Call in amber — customers can see last-minute availability may still be possible by phone
  • Gamekeepers can block slots via their smartphone management page
  • A slot is unavailable if it has a confirmed booking, a pending hold, or is within the minimum notice period
  • If a game shares a room with another game, bookings on the sibling game also block slots
  • Slots beyond your booking horizon date are not shown

Booking Flow

When a customer clicks an available slot on the calendar they are taken to the booking page where they complete three steps:

Select players & enter details. The customer chooses their player count (prices update automatically), enters their name, email and mobile number, and optionally logs into or creates a customer account.

Payment. The customer enters their card details via Stripe's secure hosted fields. They can also apply a promo code here. A 15-minute slot hold ensures their slot is reserved while they pay.

Confirmation. On successful payment the customer sees their booking reference and summary. Confirmation emails are sent to both the customer and your admin/gamekeepers automatically.

ℹ️

Slot holds: When a customer reaches the payment step, their slot is held for 15 minutes (configurable in Settings). If they don't complete payment within that time, the hold is released and the slot becomes available again.

Manage Booking

Every confirmation email contains a unique link to the customer's manage booking page by default. No login is required — the link contains a secure token that identifies the booking. To remove this link from emails, uncheck Allow Online Booking Management in Settings → General.

What Customers Can Do

  • View their booking — reference, game, date, time, players and total
  • Change player count — select a different number of players. If the price changes, both the customer and admin receive an email with details of any refund due or additional payment required
  • Cancel — with a confirmation prompt. Cancellation emails are sent automatically
⚠️

Date/time changes: Customers cannot change their date or time directly. The manage booking page instructs them to cancel and rebook. This is by design to keep the availability system consistent.

Emails

The plugin sends HTML emails automatically at each stage of the booking lifecycle. All emails are sent in both HTML and plain text formats.

EmailSent ToTrigger
Booking ConfirmationCustomer + Admin/GamekeepersPayment confirmed by Stripe
Booking ChangedCustomer + Admin/GamekeepersCustomer changes player count
Booking CancelledCustomer + Admin/GamekeepersBooking cancelled by customer or admin

Financial Notices in Change Emails

When a customer changes their player count and the price changes, the emails include a clear financial notice:

  • Refund due — customer email tells them a refund is coming. Admin email shows a green "Action Required: Process Refund" banner with the exact amount and instructions to refund via Stripe.
  • Additional payment required — customer email tells them to expect a payment request. Admin email shows a red "Action Required: Collect Additional Payment" banner.

Email From Address

Set the From Name and From Address in Settings → Emails. Make sure the From address is one your hosting allows you to send from — using an address on a different domain may cause emails to be flagged as spam.

Frequently Asked Questions

Can I have multiple games?

Yes — you can add as many games as you like. Each has its own calendar, hours and pricing. Add a separate [eerb_calendar game="slug"] shortcode for each game.

Can two games share a room?

Yes. Assign both games to the same Room when creating them. The plugin will automatically prevent double-bookings across both games.

What happens if a customer doesn't complete payment?

Their slot hold expires after 15 minutes and the slot becomes available again. No booking is created.

Can I change the hold duration?

Yes — go to Settings → Availability → Slot Hold Minutes.

Does the plugin work with page builders like Elementor or Divi?

Yes. Add the shortcodes using a Shortcode or HTML block in your page builder.

The calendar slots are in the wrong timezone — how do I fix this?

Go to WordPress Settings → General and make sure your timezone is set correctly. The plugin uses your WordPress timezone setting.

Can customers book without paying?

No — the plugin requires Stripe payment to confirm a booking. This is by design to prevent no-shows.

How do I process a refund?

Refunds are processed manually via your Stripe Dashboard. Find the payment, click Refund, and enter the amount. The plugin does not issue refunds automatically.

Can I use the plugin in a language other than English?

The plugin is translation-ready. A .pot file is included in the languages/ folder. Use a tool like Loco Translate to create translations.

What currency does the plugin support?

Any currency supported by Stripe. Set your currency symbol in Settings → Payments. Prices are stored in the smallest currency unit (pence/cents) so there are no floating point issues.

Changelog

1.3.27 — June 2026

  • Gamekeeper Slot Management — gamekeepers can block/unblock slots from their smartphones via a secure token URL
  • New Token button in Settings — instantly revoke gamekeeper access when staff change
  • Call for Information — slots within minimum notice period now show as amber "📞 Call" instead of disappearing
  • Call for Information added to calendar legend

1.3.26 — May 2026

  • New setting: Allow Online Booking Management — hide manage booking link from emails

1.3.25 — May 2026

  • Email price breakdown — shows full price, discount % and code, and total paid
  • Safe DB migrations on upgrade — min/max players and iCal tokens added automatically
  • Promo code double-count bug fixed — use count incremented on payment confirmation only
  • Cancellation email now shows refund amount to customer and staff
  • Player change correctly applies original discount % to new price

1.3.24 — May 2026

  • Promo code name shown in email price breakdown
  • get_booking query joins promo_codes table for code name

1.3.23 — May 2026

  • Cancellation email includes refund amount and action required notice to staff
  • Player count change correctly recalculates discounted price

1.3.22 — May 2026

  • Calendar Prev/Next Week now anchors to calendar position — no more scroll to top
  • Hours closed day bug fixed — is_closed flag now authoritative
  • Promo code use count moved to payment confirmation

1.3.21 — May 2026

  • Hours closed flag now saved correctly — was incorrectly derived from empty open_time

1.3.20 — May 2026

  • iCal calendar feeds for gamekeepers and admin
  • Admin iCal feed URL in Settings
  • Hours closed checkbox scoped to modal — no longer affects other games
  • Licence Server settings card removed — API secret now hardcoded

1.3.19 — May 2026

  • Admin iCal feed URL added to Settings page

1.3.18 — May 2026

  • Gamekeepers page fatal error fixed

1.3.17 — May 2026

  • iCal calendar feeds for gamekeepers — subscribe in Google/Apple/Outlook Calendar
  • ical_token column added to gamekeepers table
  • API secret hardcoded in plugin — no longer required from customers during setup

1.3.16 — May 2026

  • CodeCanyon references removed from Licence page
  • Support email updated throughout

1.3.15 — May 2026

  • Booking form player buttons extended to 20 maximum
  • All buttons hidden initially, JS shows only buttons within game min/max range

1.3.14 — May 2026

  • Pricing table extended to 20 players
  • Default prices calculated for players 9–20

1.3.13 — May 2026

  • Hardcoded API secret — no longer required from customers during setup
  • Licence Server settings card removed from Settings page

1.3.12 — May 2026

  • Min/Max Players — set player count range per game
  • Pricing table filters to selected player range
  • Booking form only shows player buttons within game range

1.3.11 — April 2026

  • Enhanced dashboard with period selector and SVG revenue chart
  • Pagination on Bookings and Customers screens
  • Config-driven pricing and currency

1.3.4 — March 2026

  • Licence system — single-site validation against escaperoombookingpro.com
  • Plugin rebranded as Escape Room Booking Pro
  • Production cleanup — debug logging removed

1.3.0 — March 2026

  • Phase 9 — Final cleanup, console logs removed, init calls wired
  • Plugin header updated with correct author details

1.2.4 — March 2026

  • Fixed admin Bookings View buttons (jQuery no-conflict wrapper)
  • Fixed Add buttons in Gamekeepers and Promo Codes pages
  • Phase 8 — Promo Codes, Gamekeepers and Reports admin screens

1.1.9 — March 2026

  • Financial notices in booking change emails (refund due / additional payment)
  • Fixed critical error caused by curly apostrophes in PHP strings
  • Manage booking — "View My Booking" link corrected

1.1.0 — March 2026

  • Admin Bookings page — searchable, filterable, with View modal and Cancel
  • Admin Customers page — with booking count and total spent
  • Manage Booking front end — change players, cancel, View My Booking
  • Email subject encoding fixed (no more garbled subjects)

Support

💬
Email Support Email support@escaperoombookingpro.com. We typically respond within 1 business day.
🐛
Bug Reports Please include your WordPress version, PHP version, and a description of the issue.
Enjoying the plugin? A 5-star review on WordPress.org helps enormously — thank you!

Before contacting support, please check the FAQ above and make sure you have:

  • Activated your licence key
  • Entered your Stripe keys in both Test and Live mode
  • Set up all three WordPress pages with the correct shortcodes
  • Entered all three page URLs in Settings → Pages
  • Set up the Stripe webhook