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/duppinstech/gravity-forms-booking-manager/archive/refs/heads/main.zipWordPress plugin that adds a Booking Manager field to Gravity Forms. Visitors pick a date from an inline calendar and an available time slot; bookings are stored on the entry and can be used in notifications.
Requirements
- WordPress 6.0+
- PHP 7.4+
- Gravity Forms (active license not required for development, but GF must be installed)
Installation
From GitHub (development)
- Clone this repository into
wp-content/plugins/gravity-forms-booking-manager/. - Activate Gravity Forms Booking Manager under Plugins.
From a release ZIP (production)
- Download the
.zipfrom GitHub Releases. - In WordPress: Plugins → Add New → Upload Plugin, choose the zip, install, and activate.
The zip must contain a single top-level folder named gravity-forms-booking-manager (use the build script below).
Form builder setup
- Edit a form in Gravity Forms.
- Under Advanced Fields, add Booking Manager.
- Click the field and configure settings in the sidebar (General tab):
- Business hours — per day: Open/Closed, with 30-minute open/close dropdowns. Use Apply Monday to for Tue–Fri or all days.
- Appointment length — slot interval (15–120 minutes)
- Blocked times — collapsible; add a time range for one weekday or for every day
- Blackout dates — collapsible; pick whole dates on the calendar
- Layout — Side by Side (50/50), Auto Responsive, or Stacked
- Time slot columns and max height
Under the Appearance tab you can hide the field label or change label placement. The default label is Schedule Appointment (editable under General).
Notifications and merge tags
Each booking field stores two inputs:
| Input | Entry key | Example merge tag |
|---|---|---|
| Appointment Date | {fieldId}.1 |
{Appointment Date:3.1} |
| Appointment Time | {fieldId}.2 |
{Appointment Time:3.2} |
Replace 3 with your field ID. You can also use the parent field merge tag for the combined value (e.g. 2026-06-15 at 14:30).
In Settings → Notifications, use the merge tag picker and expand the Booking Manager field to insert date and time separately.
Layout
- Side by Side (50/50) — calendar and slots share one row with equal columns (default).
- Auto Responsive — 50/50 until the field is narrow, then stacks.
- Stacked — calendar above slots.
After a date and time are chosen, a line under the field states that selection and says to click Submit. It does not submit the form by itself.
Scheduling rules
On the field, under the appointment length:
- Capacity per slot — how many active entries may share one time. Default 1. Maximum 20.
- Buffer — minutes required between the end of one appointment and the start of the next. Default none.
- Minimum notice — how soon a visitor may book, measured from now. Default none.
- How far ahead — the last day someone may book. Default no limit. The year dropdown lists only the years inside that window. With no limit, it lists the first bookable year and the five years after it.
Hours use the timezone in Settings → General. The field does not set a second timezone.
A checkout lock holds the last open seat for about two minutes while the form finishes saving, so two people submitting together cannot both take it.
Bookings
In WordPress admin, open Forms → Bookings. The list shows upcoming appointments from active entries (up to 200). Editors can reschedule, which checks the same rules as the public form, or cancel, which moves the entry to the trash and frees the seat. Visitors do not get a separate cancel link. They use whatever process the site owner already has for Gravity Forms entries.
Privacy and terms
- PRIVACY.md — what is stored, and a paragraph you can paste into a site policy.
- COMMERCIAL.md — GPL rights and how a paid download works.
- THIRD-PARTY-NOTICES.md — Flatpickr.
- CHANGELOG.md
Updates from GitHub
The plugin checks https://github.com/duppinstech/gravity-forms-booking-manager/releases/latest every 12 hours.
- Create a GitHub Release with a tag (e.g.
v0.2.0). - Attach a zip built with the script below as a release asset (required — WordPress cannot use the auto-generated source zip reliably).
WordPress will show an update under Dashboard → Plugins when the release version is newer than the installed version.
Building a release zip
From the repository root (PowerShell):
.\scripts\build-release.ps1
Output: release/gravity-forms-booking-manager.zip (gitignored). Upload that file to the GitHub release.
Development
git clone https://github.com/duppinstech/gravity-forms-booking-manager.git
cd gravity-forms-booking-manager
Slot rules (no WordPress required), from PowerShell in the repo root:
docker run --rm -v "${PWD}:/app" -w /app php:7.4-cli php tests/run.php
Local WordPress, without Gravity Forms, from the repo root:
docker compose up -d
Then open http://localhost:8080. Copy a licensed Gravity Forms plugin into the site before the booking field can load. Stop the stack with docker compose down.
Push to main; tag releases for production updates.
Security
See SECURITY.md for reporting vulnerabilities.
License
GPL-2.0-or-later — see LICENSE.