A WordPress booking calendar really comes down to two decisions: where your appointment data lives and where on the site a customer starts booking. Installing it takes minutes; setting up your offer, checking the cookie banner and making one real booking from a phone take longer. This guide does not rank plugins; it walks you through the choices you will live with for years.
If you are still deciding what the tool must do, start with our guide to what an online booking system needs to handle. Here we assume you already know which services to offer and want to publish them safely on a site built with WordPress.
A separate plugin or an embedded service
A booking plugin runs inside WordPress: appointments, customers and messages go into your site database. An embedded service stores bookings on an external server, and your page only shows the form. Visitors see much the same thing; the difference is who handles backups, updates and team access.
Scroll the table sideways to see all columns.
| Criterion | WordPress plugin | Embedded service |
|---|---|---|
| Where data lives | In the site database, included in the site backup | On the provider server, under its retention rules |
| Team access | An account in the WordPress dashboard | A separate panel, with no access to site administration |
| Updates | Your job, alongside the theme and other plugins | The provider's job; only the embed code sits on your site |
| Theme or site change | Plugin compatibility has to be checked again | You move the form by pasting the same code elsewhere |
If your front desk should work in a calendar rather than in the site dashboard, an embedded service is usually simpler. A plugin can be the better fit when you want everything in one database and someone updates it regularly. Record the choice in your site documentation to avoid a second calendar later.
Where to place booking on your site
Customers book once they know what they are choosing. That is why the form works best right below the service description, not on a separate page listing every offer. A menu item and an in-text button should lead people back to that spot, not replace the description.
- Service pageThe form sits below the description, indicative price and duration. Customers do not have to find the same offer again in a list.
- Menu itemA short label such as Book a visit that leads to the page with the form. Useful for people coming back a second time.
- In-text buttonOpens the form in a window over the page. Good for posts and pages where a full calendar would take too much space.
On a phone, check that the button is not hidden under the cookie banner or the chat icon. If a chat window already runs on the site, our guide to WordPress website chat covers the widget settings. Booking links on social profiles are a separate topic, covered in our guide to sharing a booking link.
Embedding the form step by step
- Prepare the offer and form.A form without an active offer and hours shows an empty calendar. Set up the service first, then publishing.
- Allow your domain.In the form's list of allowed sites, tick the domain where you will embed it. A staging copy on another domain will then not accept bookings.
- Copy the embed code.Choose an inline form, a button that opens a window or just a link to the booking page.
- Paste it into a Custom HTML block.In the service page editor, add a Custom HTML block below the offer description and save as an administrator.
- Clear the cache and open the page.After the change, purge the page and CDN cache, then open the address in a private window, not in the logged-in editor.
In Meetlead Bookings, the publishing tab of a booking form offers three options: an inline form, a button that opens a window and a public link. The code always includes a fallback link to the booking page, for cases when the script does not load. If your site is connected through the official Meetlead plugin, you paste only the form element, without a second script. The plugin connection is tied to the exact host, so a copy of the site at another address will not take over bookings.
The WordPress documentation on the Custom HTML block explains how to insert your own code and preview it. A user without the unfiltered_html capability, such as a Contributor, saves content stripped of disallowed tags such as <script> and <iframe>, so an administrator should paste code that includes a script. The source does not describe any specific booking tool.
What to configure before launch
An empty or overly generous calendar does more harm than having none. A customer who books an impossible slot will still call, only later and less patiently. Go through the list below before you paste any code.
- Every offer has a name, duration and indicative price that match the price list on your site.
- Hours reflect the real schedule, including breaks and shorter days.
- Buffers before and after each visit cover preparation and cleanup.
- Exceptions, holidays and days off are entered for at least the coming weeks.
- Required customer details are limited to what you need to deliver the service.
- An approval mode is chosen: automatic, or manual with a named person responsible.
When several offers use the same station or equipment, link them to a shared pool as described in our guide to avoiding double bookings. Choosing form fields is covered separately in our guide to booking form data. Meetlead shows an indicative price and does not take online payments, and appointments from staff members' private calendars are not imported automatically.
Testing a real booking from a phone
A preview in the editor is not a test. Ask someone outside your team to book a slot on their own phone, using mobile data, exactly as a customer would. You watch the panel and the inbox.
- Entry.Open the service page from search or the menu in a private window and respond to the cookie banner like a new visitor.
- Selection.Pick an offer, the number of people or units and a slot tomorrow morning, then another one several weeks ahead.
- Details and summary.Fill in the fields, check the error messages and compare the summary with the chosen offer.
- Panel.Check that the booking appears in the calendar with the correct status and time.
- Cleanup.Cancel the test booking in the panel so that it does not block the slot for a real customer.
Write down the result of each step. If anything behaves differently, fix the setup and repeat the whole run, not only the step that failed.
Cookie consent and customer messages
The booking form loads a script from an external server, so its behavior depends on your consent settings. The official Meetlead plugin has three modes, and an administrator selects one when connecting the site. This is not legal advice; set the lawful basis and privacy policy wording for your setup.
Scroll the table sideways to see all columns.
| Mode | What loads immediately | What to check in your test |
|---|---|---|
| Load immediately (default) | The widget, the form and enabled analytics | Your privacy policy must reflect this decision |
| Wait for consent | Nothing before functional consent | Until then, customers see only the fallback link to the booking page |
| Chat immediately | The widget; analytics only after analytics consent | With WP Consent API, the widget also waits for functional consent |
The WP Consent API plugin page explains that it passes consent signals between a banner plugin and other plugins and does not collect consent itself. It therefore does not prove that your banner is set up correctly.
Customer emails are sent only when they are enabled in the settings and in the offer, and the customer has entered an address. If email is not a required field, some bookings will have no email confirmation. When a customer reports a missing message, follow the steps in our guide to a missing booking confirmation. Also decide who on your team checks the calendar and requests awaiting manual approval every day.
Questions about a WordPress booking calendar
Will a booking form slow down my site? Every extra script has a cost, so measure the service page before and after pasting the code, on the same phone. An inline form loads only where you place it. Skip it on pages that do not need booking.
Can I test booking on a staging copy of the site? You can check the layout there, but test the actual booking on the live domain. The form accepts bookings only from allowed addresses, and the plugin connection is tied to the exact host. Make one test booking on the live site and cancel it right away.

