Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/webbyupinc/tpg-room-booker/archive/refs/heads/main.zipTPG Room Booker — v1.8.3
A lightweight, secure WordPress room reservation system for shared tenant spaces.
Installation
- Upload the
room-bookingfolder to/wp-content/plugins/. - In your WordPress admin, go to Plugins → Installed Plugins and activate TPG Room Booker.
- On activation the plugin creates room and booking tables plus supporting tables for invites, audit history, notifications and billing. The
wp_prefix may differ. The original booking records remain intact on in-place upgrades.
Embedding on a Page
Add this shortcode to any WordPress page or post:
[room_booking]
Tenants must be logged in with a WordPress account to see the booking interface. Logged-out visitors see a "Please log in" message.
Admin Usage
Dashboard (TPG Room Booker → All Bookings)
- Stat cards: total owed this month, all-time revenue, active booking count, active room count.
- Filter bookings by status, room, or tenant name/email.
- Edit or Delete any booking (no 24-hr restriction for admins).
- Add Booking — create a booking on any tenant's behalf.
Room Management (TPG Room Booker → Manage Rooms)
- Edit each room's name, description, per-15-min rate, open/close hours, and active status.
- Only active rooms appear in the tenant-facing calendar.
- Deactivating a room hides it from tenants but preserves all historical bookings.
- Add or archive rooms. Room removal does not physically delete the room record; historical bookings retain original room names and booking rates in v1.8.2.
Tenant Usage
Book a Room tab
- Select an active room from the pill buttons at the top.
- Toggle between Day, Week, and Month. On small phones, Week shows two day columns; Today begins on the left, and earlier dates remain available by horizontal swipe.
- Click any open time slot to select it. Tenants may also enter a missed appointment from the current Monday–Sunday calendar week until Sunday ends in the business timezone; earlier weeks require an administrator. Historical entries cannot be cancelled/rescheduled by tenants.
- Adjust duration in 15-minute steps using the + / − controls (15 min minimum, 4 hr maximum). The cost updates live.
- Add optional notes, then click Confirm Booking.
My Bookings tab
- Totals shown for today, this week, this month, and all time.
- Full booking history with room name, date/time, duration, cost, and status.
- Cancel button appears for upcoming confirmed bookings outside the 24-hr window.
- A 🔒 lock indicator replaces the cancel button when the booking is within 24 hours of start.
Onboarding Tenants (Invite Links)
Self-registration is not open to the public — this prevents bots or randoms from finding the page and creating accounts. There are two ways a tenant gets booking access:
Option A — Invite link (new tenants)
- Go to TPG Room Booker → Invites.
- The first time, set your Booking page URL (the page where you placed
[room_booking]) and click Save. - Enter the tenant's email (optional, just for your records) and click Generate Invite Link.
- Copy the link and send it to the tenant directly (text, email, whatever you'd like).
- The link opens the booking page and walks them straight into account creation. Booking access is granted automatically the moment they finish — no separate approval step needed.
- Each link works once. Once used, it shows as "used" in the Invites table; you can revoke any unused link at any time.
Option B — Grant access on an existing WordPress account
If someone already has a WordPress login on your site (e.g. they registered for something else, or you added them manually), you don't need an invite link:
- Go to Users in WP Admin and open that person's profile.
- Scroll to the TPG Room Booker section.
- Check "This user can log in and book rooms" and save the profile.
Administrators always have booking access automatically and never need this toggle.
Pricing
Pricing is set per room as a rate per 15 minutes. Examples:
| Rate/15min | 15 min | 30 min | 45 min | 1 hr |
|---|---|---|---|---|
| $1.50 | $1.50 | $3.00 | $4.50 | $6.00 |
| $2.00 | $2.00 | $4.00 | $6.00 | $8.00 |
Security Notes
- All AJAX endpoints are protected with WordPress nonces.
- Admin-only actions require
manage_optionscapability. - All database queries use
$wpdb->prepare()to prevent SQL injection. - User input is sanitized before storage; output is escaped before display.
- Tenants can only cancel their own bookings. Admins can modify any booking.
Cancellation Rules
- Tenants cannot cancel a booking within 24 hours of its start time.
- Admins can cancel or modify any booking at any time, regardless of the 24-hr window.
Shortcode Reference
| Shortcode | Description |
|---|---|
[room_booking] |
Full booking interface for tenants |
Requirements
- WordPress 5.8+
- PHP 7.4+
- MySQL 5.7+ (or MariaDB 10.3+)
- Your existing SiteGround hosting meets all of these requirements.
v1.7.0 changes and deployment
See CHANGELOG.md and INSTALL-PHASE2.md. Booking timezone defaults to the WordPress IANA timezone for fresh installations; existing v1.6.0 bookings are pinned to America/New_York on upgrade for safety. Email notifications are entirely opt-in (admin master AND tenant preference), both off by default. Existing booking history is retained by the migration. Weekly recurrence and desktop drag-to-reschedule are available. A staging test is required before production installation.
v1.8.0 Phase 3 additions
See PHASE3-FEATURES.md and INSTALL-V1.8.0.md for billing and email behavior, migration, and verification. The separate billing master switch is OFF by default. No prior booking history is deleted or repriced. Historical charges made before the initial billing cutover are displayed but not assumed unpaid until an administrator reconciles them.
v1.8.2: past appointment entry
Tenants with booking access can add a single missed appointment on an earlier business-local day using the Day/Week calendar. Existing booked/blocked slots and room hours still apply. The booking is permanent for the tenant once it is entered (only administrators can reschedule, void or correct it); notes follow the existing until-appointment-end rule. The interface warns and requests confirmation before saving. Recurring bookings cannot begin in the past.
To prevent retroactive entries being omitted from weekly bills, late-entered appointment charges are posted to the reporting week in which they are recorded, while their actual appointment date is retained. The new nullable billing_posted_at field stores this posting date for backdated bookings only. All historical booking, payment and billing rows remain intact. Automatic statement emails remain optional and do not change their current settings.