HomeAdd a widgetWordPress
Add a booking calendar to WordPress
Let visitors book you straight from WordPress. Set your real working hours — split days included — and the widget offers slots in the visitor’s own timezone, checking your connected calendar so it never double-books you.
Free plan, no card. Paid plans start at $19 a month.
Why do it this way on WordPress
Booking plugins for WordPress tend to arrive as a whole subsystem — post types, database tables, a settings page, and an update you have to keep taking. A Custom HTML block gets you a booking calendar with none of that surface area, and your availability is edited in Sorraia rather than in wp-admin. Put the block on your Contact or Book page; there is nothing site-wide to configure.
See it working
This is a real Sorraia booking calendar — the one we use for product demos, embedded here exactly the way you would embed yours. Pick a slot and it books.
How to add a booking calendar to WordPress
A widget that sits in the page flow goes in a Custom HTML block, on the one page you want it on.
Self-hosted WordPress has no plan gating on any of this. WordPress.com does: on the free plan the Custom HTML block strips script, style, link, iframe, frame, form, input, object, textarea and embed tags, so nothing renders — and note that link is on that list, meaning an externally-linked stylesheet is blocked too, not just inline CSS. Its paid plans — Personal, Premium, Business and Commerce — all allow custom code, but you have to install at least one plugin before the plan’s hosting features switch on, so a paid site that has never installed a plugin will still have the embed silently removed.
In Sorraia, add the website and verify it — a DNS TXT record, or a meta tag in your homepage’s <head>. Verification is what lets you attach a widget to that site, so it comes before there is anything to paste.
Save the calendar and the Copy Embed Code popup appears; the Install wizard on the calendar’s row on the Calendars page does the same job with a verification step.
Open the page in WordPress (Pages → hover the page → Edit) and put the cursor where the widget should sit.
Click the Block Inserter (the + icon), search for “HTML”, and choose Custom HTML. In an empty paragraph you can also type /html and press Enter.
Paste the Sorraia snippet into the block, then click Publish or Update on the page.
Open the live page in a new tab to check it. The block editor renders its preview inside a sandbox, so a working widget can look boxed-in or blank while you are editing.
If the site still runs the Classic Editor, switch from the Visual tab to the Text tab, paste the snippet there, and save without switching back. TinyMCE reformats markup on the round trip and can mangle or drop the script.
What you get
Let visitors book you straight from WordPress. Set your real working hours — split days included — and the widget offers slots in the visitor’s own timezone, checking your connected calendar so it never double-books you.
Split days, not one block
A working day is an ordered list of up to four windows, so 9:00–12:00 plus 13:00–17:00 is one calendar rather than a compromise — the lunch gap serves no slots at all. The honest limit: that window list applies to every working day you tick. Split days are supported; giving Monday different hours from Tuesday is not.
Slots in the visitor’s own timezone
The widget detects the visitor’s timezone in their browser and renders every slot in it, with the zone named and changeable from a dropdown — and if their zone is not in the list, it gets added rather than snapping them to a wrong one. Nobody has to work out in their head whether your 3pm is their 3pm, which is the most common way a booking gets missed.
It fails safe, so it never double-books
When a host has a calendar connected, busy time is checked before a slot is offered. If that check cannot complete — the provider is down, the token is stale — the day is treated as busy rather than offered. You may occasionally show less availability than you have; you will not get booked over something.
Name and email are yours to rename
The built-in Name and Email rows are ordinary rows in the field list: rename them, reorder them, put your own questions above them. The booking payload keeps its fixed shape underneath, so renaming a label can never break a workflow that reads it.
Every booking gets a manage link
The confirmation carries a token link the guest uses to reschedule or cancel — rescheduling keeps the same link working, cancelling retires it, so a cancelled meeting’s link stops being a working key the moment the meeting is off.
More detail in the Help Center: Calendars & bookings · Embedding on your website
Things worth knowing about WordPress
- Silent script stripping is the most common failure. WordPress removes <script> on save from any user without the unfiltered_html capability — always the case for non-Super-Admins on multisite, and often on a single site where a security plugin (Wordfence, Solid Security) or DISALLOW_UNFILTERED_HTML has taken it away. The block saves cleanly and the script is simply gone.
- Caching and optimisation plugins are the second. WP Rocket, Autoptimize, LiteSpeed Cache and Perfmatters defer, combine, minify or lazy-load JavaScript by default, which breaks async widget loaders. Add the Sorraia script URL to the plugin’s exclusion list.
- The block editor’s preview pane is a sandboxed iframe, so a floating launcher looks clipped inside the block while you edit and works correctly for visitors. Check the published page, not the editor.
Questions
Can I have a lunch break, or two separate blocks in a day?
Yes — that is exactly what the windows are for. A day holds up to four working-hours windows, so a morning block and an afternoon block is the normal setup rather than a workaround, and the gap between them offers nothing. What it does not do is per-day hours: the same window list applies to every day you have ticked as a working day.
What timezone do visitors see?
Their own, detected in their browser, with the zone shown on the widget and changeable if they are travelling. Your own timezone is displayed alongside so both sides can see what they are agreeing to.
Does it check my real calendar?
Yes, when you connect one — Google Calendar today. Busy time is read before slots are offered, and if that read fails the day is treated as busy rather than offered, so an outage costs you a few visible slots instead of a double booking. Multi-host modes like round-robin and collective scheduling are available on organisation accounts.
Do I need a plugin to add a Sorraia widget to WordPress?
No. An inline widget goes in a Custom HTML block, which is part of WordPress itself. A plugin is only worth installing for the site-wide case — a floating chat launcher on every page — because a footer snippet plugin like WPCode survives theme updates, while a hand-edited footer.php does not.
The widget disappeared after I saved the page. Why?
Almost always script stripping. WordPress removes script tags on save from users without the unfiltered_html capability, and security plugins remove that capability from ordinary administrators. To confirm: open DevTools → Network, save the block, and inspect the request — if the script is in the request body but missing from the response, something stripped it server-side. Adding it site-wide through a snippet plugin sidesteps the block’s filtering entirely.
Add a booking calendar to WordPress
Build it in Sorraia, paste one line into your WordPress site, and change it later without touching the embed again.