How to Build a Booking Form in WordPress (Step by Step)

Quick answer

To build a booking form in WordPress, install Giraforms Pro, add a Form Container block to any page, and insert the Booking field. In the block settings, configure available days, time slots, and per-slot capacity. Email confirmations are sent automatically to both the submitter and the admin after each booking. This is a Giraforms Pro feature.

If your business relies on appointments — consultations, personal training sessions, salon visits, guided tours, co-working reservations — an online booking form is one of the highest-value things you can add to your WordPress site. Letting customers self-schedule eliminates back-and-forth emails, reduces no-shows with automatic confirmations, and keeps your calendar full even when you're offline.

According to a 2023 Statista survey, 70% of consumers prefer to book services online rather than by phone or email — and that preference is growing year over year among all age groups.

What makes a good WordPress booking form?

A functional booking form needs more than just a date field. It needs a visual calendar picker so users can select an available date intuitively, time slot selection so they know exactly when they're booking, capacity limits so you don't get double-booked, and automatic email confirmations so both you and the customer have a record. Optional but high-value additions include payment at time of booking (for deposits or prepayment) and the ability to block out unavailable periods.

Requirements: Giraforms Pro

The Booking field is a Giraforms Pro feature. The free version of Giraforms covers standard form types (contact, feedback, lead gen), but booking functionality — with calendar, time slots, and capacity management — requires the Pro license starting at $39/year. See the Booking System feature page for a full overview.

Step 1 — Install Giraforms Pro

Download the Giraforms Pro ZIP from your customer dashboard at customers.freemius.com. In WP Admin, go to Plugins → Add New → Upload Plugin, select the ZIP, and install. Activate the plugin, then go to Giraforms → License to activate your Pro key. All Pro features, including the Booking field, become available immediately.

Step 2 — Create a new form and insert the Booking field

Go to Pages → Add New, give the page a title (e.g., "Book an Appointment"), and insert a Form Container block. Start with a blank form. Then, inside the Form Container, click the + inserter and search for "Booking". Select the Booking field to insert it. The field renders a calendar widget that your visitors will use to select a date and time.

Step 3 — Configure available days and time slots

Select the Booking field block. In the block settings panel on the right, you'll find the availability configuration. Set:

  • Available days: toggle which days of the week are bookable (e.g., Monday through Friday only)
  • Slot start time: when the first slot of the day begins (e.g., 9:00 AM)
  • Slot end time: when the last slot can be booked (e.g., 5:00 PM)
  • Slot duration: the length of each time slot (e.g., 30 minutes, 60 minutes)

Giraforms automatically calculates the available slots for each day based on these settings. If you set 9:00 AM to 5:00 PM with 60-minute slots, visitors will see 8 available time options per day.

Step 4 — Set booking capacity per slot

In the Booking field settings, find the Max bookings per slot option. Enter the maximum number of bookings you accept simultaneously for each time slot — typically 1 for individual consultations, higher for classes or events. Once a slot reaches capacity, Giraforms automatically removes it from the calendar. Future visitors won't see full slots as available options. No manual tracking or update required on your end.

💡

Blocking dates: You can mark specific dates as unavailable (holidays, vacations, maintenance days) in the Booking field settings. Blocked dates appear greyed out in the calendar and cannot be selected.

Step 5 — Add supporting fields to your form

The Booking field handles date and time selection, but you'll want to collect contact details too. Add these fields using the block inserter inside the Form Container, positioned before or after the Booking field:

  • Text field — First and last name
  • Email field — Required for sending the confirmation email
  • Phone field — Optional, useful for SMS reminders
  • Dropdown — Service type (e.g., "Initial consultation", "Follow-up", "90-minute session")
  • Textarea — Notes or special requests

Step 6 — Configure confirmation emails

Select the Form Container block and open the Email Notifications tab in the block settings. Set up two notifications:

  1. Admin notification: recipient = your email address, subject = "New booking: {name} on {booking_date} at {booking_time}"
  2. Customer confirmation: recipient = {email} (the submitter's email field), subject = "Your booking is confirmed", body = include {booking_date}, {booking_time}, service details, and your contact info for changes/cancellations

The customer confirmation is critical — it sets expectations, reduces no-shows, and gives the customer something to reference when they show up.

Step 7 — Optionally add Stripe payment for deposits

For paid bookings (consultation deposits, class pre-payment, service fees), add a Stripe Payment field to the same form. Configure the amount (fixed deposit or dynamic based on service selection) in the field settings. Payment is collected at the same time as the booking, before the time slot is confirmed. See our complete guide on adding a Stripe payment form to WordPress.

Step 8 — Publish and test

Publish the page. Visit it from a browser and test the full flow: select a date, pick a time slot, fill in your contact details, and submit. Check that both email notifications arrive. Check the Giraforms → Submissions panel to confirm the booking was recorded. If you've added Stripe payment, use Stripe test mode cards to verify the payment flow. Once everything looks good, the booking form is live.

Common booking form use cases

The Giraforms booking system is flexible enough for many service types: individual service appointments (hairdresser, physiotherapist, personal trainer — one slot per time, capacity = 1), group classes (yoga, cooking workshops — capacity = 10 or 15 per slot), consultation calls (lawyers, accountants, coaches — calendar sync with Calendly-like UX), equipment rental (studios, vehicles, instruments — availability by day), and co-working desks (daily or hourly bookings with defined capacity).

Frequently Asked Questions

Yes. In the Booking field settings panel, set the "Max bookings per slot" value. Once that number of bookings is reached for a slot, it disappears from the calendar automatically. For individual consultations, set this to 1. For classes, set it to your class size limit.
Yes. In the Form Container block settings, configure two Email Notifications: one to the admin with booking details, and one to the submitter using their form email address as the recipient. Both notifications support template tags like {booking_date}, {booking_time}, and {name} to personalize the message.
Yes. Add a Stripe Payment field to the same form as your Booking field. You can set a fixed deposit amount (e.g., $25 to hold the slot) or link it to a service selection dropdown for variable pricing. Stripe processes the payment at submission time, before the booking is confirmed. See our guide on adding a Stripe payment form for setup details.
Yes. In the Booking field settings, you can add date ranges to exclude. Blocked dates are greyed out and unclickable in the calendar — visitors cannot select them. This is useful for public holidays, business closures, or periods when you're unavailable.
Yes. The Giraforms date picker and time slot selector are fully responsive. The calendar adapts to small screens with touch-friendly tap targets, making the booking experience smooth on smartphones and tablets.