WordPress Plugin Setup Guide Step
Booking Board Widget
Step-by-step for installing and configuring the Booking Board widget on a WordPress site.
1. Prerequisites
- WordPress 6.0+ and PHP 7.4+
- Admin access to the WordPress site
- Admin access to your Booking Board chain dashboard
- The WordPress site's public domain (e.g.
example.com)
2. Install the plugin
| URL | Use this when… |
|---|---|
https://widget.bookingboard.io/wordpress-plugin/booking-board-widget-plugin.zip |
First-time install — always the latest. |
- Download the zip that matches your case.
- In WordPress admin: Plugins → Add New → Upload Plugin.
- Select the zip, click Install Now, then Activate.
Plugin appears under Tools → Booking Board Widget.
3. Generate an API key (Booking Board dashboard)
The widget authenticates with a per-domain API key tied to your chain.
- Log in to your Booking Board dashboard.
- Open System settings on the chain that owns the gym(s) you want to expose.
- Scroll to Website Integration.
- Click Add domain.
- Enter the WordPress site's domain without protocol, e.g.
example.com. Click Save. - Copy the API key immediately — it is shown in cleartext only once. Afterwards it is masked (
BB_∗…∗_∗…∗). If lost, delete and re-create.
The dashboard also shows the widget embed snippet with your sub-domain and (optionally) a selected gym id pre-filled — useful as a reference.
What is the sub-domain?
It is the prefix of your chain's Booking Board domain. Examples:
| Chain domain | Sub-domain value |
|---|---|
mygym.bookingboard.io |
mygym |
The widget resolves API calls to https://{sub-domain}.bookingboard.io/.
What is the gym id?
If set, the widget skips the gym picker and books directly into that gym. Leave blank to let users pick a gym from the chain.
4. Configure the plugin
- In WordPress admin: Tools → Booking Board Widget.
- Fill in:
- API Key — paste the value from step 3.
- Sub Domain — e.g.
mygym. - Gym id — numeric gym id, or leave blank.
- Click Save.
Values are stored as WordPress options and default into the shortcode.
5. Embed the widget on a page
Add the shortcode anywhere (page, post, block editor as a Shortcode block):
[booking-board-widget]
Overriding defaults per placement
All four attributes are optional; unset attributes fall back to the saved settings.
| Attribute | Example | Purpose |
|---|---|---|
api-key |
api-key="BB_...." |
Use a different key on this page. |
sub-domain |
sub-domain="mygym" |
Point to another chain environment. |
gym-id |
gym-id="42" |
Pre-select a gym. |
lang |
lang="en" |
UI language (default da). |
Example:
[booking-board-widget lang="en" gym-id="42"]
The shortcode renders:
<div class="bookingboard-widget"
data-sub-domain="..."
data-api-key="..."
data-gym-id="..."
data-language="..."
style="width: 350px; height: 540px;"></div>
<script src="https://widget.bookingboard.io/widget.js" async></script>
6. Verify
- Open the public page in a logged-out browser.
- Widget loads a form.
- Book a test time slot end-to-end.
7. Troubleshooting
| Symptom | Likely cause |
|---|---|
| Widget container stays empty | widget.js blocked, or no .bookingboard-widget div rendered (shortcode not executed). |
| API calls 401/403 | API key wrong, revoked, or domain on the key does not match the site serving the page. |
| API calls fail DNS / 404 | Sub-domain wrong; should be the chain's prefix without .bookingboard.io. |
| Stuck on loading spinner | gym-id references a gym that does not exist or is not under this chain. |
| Wrong language | lang attribute or saved language not set; default is da. |
| Key lost | Keys are one-view; delete and re-create in dashboard. |
8. Rotating or removing a key
- Rotate: in dashboard, delete the current domain entry and re-add it. Paste the new key into the plugin settings.
- Uninstall: deactivating + deleting the plugin removes the stored options (
*-api-key,*-sub-domain,*-gym-id) via the uninstall hook.