HomeAdd a widgetWordPress
Add a booking calendar to WordPress
A booking calendar styled to match your WordPress site, placed with Sorraia’s own plugin or one copy-paste into a Custom HTML block, with slots in each visitor’s own timezone.
Self-hosted WordPress: no plan needed · WordPress.com: a paid plan with hosting features activated
Free plan with no time limit, no card.
See it working
This is a real Sorraia booking calendar, loaded by the same embed script you paste and showing times in your own timezone. Pick a slot to see the confirmation screen; nothing is booked.
How to add a booking calendar to WordPress
A calendar belongs on one page — Book, Contact, a service page — so it needs nothing site-wide. With Sorraia’s plugin connected, choose it by name in the Sorraia widget block, or tick the pages under Settings → Sorraia and let Add to selected pages append it. Its hours, questions and colours stay in Sorraia, so an edit there reaches the page without anyone opening wp-admin. Without the plugin, the Custom HTML block steps below get you the same calendar.
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.
On WordPress 7.0, click Edit HTML on the block to open its editing modal, paste the Sorraia snippet into the HTML panel, and press Update. On earlier versions, paste it straight into the block. Then click Publish or Update on the page.
Open the live page in a new tab, logged out or in a private window, and check the widget there rather than in the editor.
Where these steps come from:12
Add the DNS TXT record if you manage the domain’s DNS. Otherwise the meta tag goes in your homepage’s <head>: a header-and-footer plugin such as WPCode has a Header box for exactly this.3
Self-hosted WordPress has no plan gate on any of this. WordPress.com filters script tags out of the Custom HTML block on the free plan, so nothing renders. Any paid plan — Personal, Premium, Business or Commerce — runs the snippet once its hosting features are activated: install a plugin, upload a third-party theme, or (on Business and Commerce) turn on backups. Commerce sites are activated automatically. Activation is one-time, and it moves the site’s default address to *.wpcomstaging.com.4567
Worth knowing for this one
- The Timezone drop-down under Settings → General sets WordPress’s own clock, not the calendar’s. You set your hours and your timezone in the calendar in Sorraia, and each visitor sees the slots in theirs.8
- WordPress shows a Custom HTML block’s preview beside its code, and the Sorraia block shows a placeholder in the editor rather than the calendar, so judge the time list on the published page.1
What WordPress already has
WordPress.com has a Calendly block on its Premium, Business and Commerce plans. It puts a Calendly calendar on the page for customers to schedule appointments, and it needs a Calendly account of its own. If a client already books through Calendly, that block is the native route and a fine one. A Sorraia calendar fits when you would rather not run a scheduling account per client: every site’s bookings land in the one dashboard you use for all of them, and each calendar starts from that site’s brand-kit colours.9
What’s included
- Slots in each visitor’s own timezone
- Google Calendar sync when you connect Google Calendar
- An .ics file with every confirmation
- A Google Meet link when your calendar uses one
- Styled to match: colours from the site’s brand kit
Free plan with no time limit, no card.
More detail in the Help Center: Calendars & bookings · Embedding on your website
Questions
Is there a booking block in Sorraia’s WordPress plugin?
Yes. The Sorraia widget block lists your forms, booking calendars and shops by name: choose the calendar under Which widget?, then publish. The calendar loads when the page is displayed, so the post stores only the block.
Which timezone does the calendar show a WordPress visitor?
Their own. The calendar reads it in the visitor’s browser, names the zone and offers a dropdown to change it, whatever timezone the WordPress site itself is set to.
What lands in my Google Calendar when someone books from WordPress?
Once you connect Google Calendar, each booking syncs to it, with a Google Meet link when your calendar uses one. Without a connection, every booking still saves to your dashboard and the guest still gets the .ics file.
Can the calendar go on several WordPress pages at once?
Yes. Add the block or the shortcode wherever it should appear, or tick the pages under Settings → Sorraia and press Add to selected pages, which appends it to the end of each. It is one calendar, so a booking made on any of them takes the same slot.
Can Sorraia’s plugin verify my WordPress site as well?
Yes. Once the plugin is connected, Settings → Sorraia has a Verify this site button, and Sorraia checks the site directly, with no DNS record and no theme edit. It doesn’t work for WordPress installed in a subdirectory; there, use the DNS record or the meta tag.
Sources
- Custom HTML block · wordpress.org
- Adding a new block · wordpress.org
- WPCode header and footer · wpcode.com
- Custom HTML block (WordPress.com) · wordpress.com
- Code on WordPress.com · wordpress.com
- Activating a WordPress.com plan · wordpress.com
- Plugins on WordPress.com · wordpress.com
- General settings · wordpress.org
- Calendly block (WordPress.com) · wordpress.com
Each page read and checked on 20 October 2026.
Add a booking calendar to WordPress
Build it in Sorraia, put it live on your WordPress site with one copy-paste, and change it later without touching the embed again.