WooCommerce Bookings hosting that never sells the same slot twice.
Availability is recalculated on every calendar view, and two people can reach for the last slot in the same second. Both of those are infrastructure problems before they are plugin problems.
Everything a booking calendar asks of a host.
The calendar is the most expensive thing on the site and the least cacheable. The stack is configured around that rather than despite it.
Calendars that load while people are choosing
The availability request is an AJAX call that runs a real query across every existing booking in the range. It is excluded from the page cache and given PHP headroom so the calendar fills in immediately.
Two customers, one slot, one winner
Checkout writes are wrapped so the availability check and the booking insert happen as a single locked operation. The second customer is told the slot has gone rather than being sold it as well.
Availability lookups held in memory
Bookings caches its availability calculations. Kept in Redis rather than in the options table, those lookups stop competing with the writes that are creating new bookings at the same time.
Pending bookings that actually expire
Unpaid holds are released by a scheduled job. Driven by system cron it runs on time, so slots do not stay blocked by abandoned checkouts until the next visitor happens to arrive.
Nightly backups of the calendar
Bookings, customers and orders in one snapshot, replicated off the origin, restorable from the dashboard without asking anyone to rebook.
Watch the calendar, not the server.
Booking sites fail in ways that look like nothing at all: a hold that never released, a cron that stopped, a calendar that got slower as the season filled up.
- One-click admin login, no shared passwords
- Availability endpoint response time tracked
- Plugin and core updates with per-item status
- Restore any daily backup from the dashboard
A full calendar loads like an empty one.
Availability cost grows with the number of bookings already taken, which means the busiest month of the year is also the slowest — unless the lookups are in memory.
What we change for WooCommerce Bookings
These differ from a standard WooCommerce site on the same plan, because a booking store sells a finite thing that two people can try to buy simultaneously.
| Setting | What we do | Why |
|---|---|---|
| Availability AJAX endpoint | Excluded from page cache and given reserved PHP worker headroom | Every calendar view triggers a live query across existing bookings in the range, so it cannot be served from a cache and it cannot be allowed to queue behind ordinary page requests while a customer waits for dates to appear. |
| Availability transients | Stored in Redis rather than the options table | Bookings writes its cached availability constantly, and keeping that churn in the options table puts it in direct contention with the very inserts that are creating new bookings. |
| Checkout transactions | Availability check and booking insert wrapped in a single locked transaction | Without a lock held across both steps, two simultaneous checkouts can each read the same slot as free before either writes, and the store confirms an appointment it cannot honour. |
| max_execution_time | Raised for the endpoints that evaluate wide date ranges | A customer opening a twelve-month view asks for a calculation across every resource and every existing booking in that window, which is an order of magnitude more work than any other request the site serves. |
| Pending-booking cleanup | Released by system cron on a fixed schedule | Unpaid holds block real inventory, and under wp-cron they are only released when a visitor arrives — so the quietest hours are exactly when abandoned checkouts keep slots off sale the longest. |
Simple, transparent pricing.
Every plan includes free migration, daily backups, SSL and 24/7 support.
- 1 WordPress site
- 10 GB NVMe disk
- Free SSL
- Daily backups
- One-click deployment
- Support tickets
- 5 WordPress sites
- 50 GB NVMe disk
- Free SSL
- Daily backups
- One-click deployment
- Priority support tickets
- 20 WordPress sites
- 200 GB NVMe disk
- Free SSL
- Daily backups
- One-click deployment
- Dedicated support
Questions, answered.
Can two customers book the same slot at once?
Why does my booking calendar take so long to load?
Can I put the calendar behind a page cache?
Do unpaid bookings release automatically?
Does this work with Amelia or Bookly instead?
Run WooCommerce Bookings without overselling your calendar.
Free migration, availability that loads instantly, and locking that holds at checkout.