xpay✦ Commerce
Directory
WooCommerce plugins
BookingHive – Reservation Calendar for WooCommerce
BookingHive – Reservation Calendar for WooCommerce
Turn any WooCommerce product into a bookable one: date-range calendar, seasonal rates and period rules for apartments, boats, cars and gear.
Will this break my store?
What the WordPress.org registry says about keeping BookingHive – Reservation Calendar for WooCommerce running.
Tested to 7.1
Tested against the WordPress branch in use today.7 days ago
At least 1.5 releases a year since launch. WordPress.org only lists versions still available for download, so the real number may be higher.7.4
Your host must be running at least this version.6.2
woocommerce
These must be installed and active first.1
A single maintainer. Worth knowing if the plugin is load-bearing for your store.Maintenance & trust
Scored on how BookingHive – Reservation Calendar for WooCommerce is looked after — not on how many stores run it.
Maintenance
35 / 35WordPress compatibility
20 / 20Support responsiveness
Not enough dataMerchant satisfaction
Not enough dataListing transparency
10 / 10Ratings
No one has rated this plugin on WordPress.org yet. That is a statement about the ratings page, not about the plugin — plenty of well-kept plugins never collect them.
BookingHive extends WooCommerce with bookable and rentable products. It adds a booking calendar to the product page, prices each stay from a seasonal price list, and keeps every reservation in a dedicated dashboard — so the shop you already run starts selling nights, days and weeks instead of pieces.
Use it for anything billed per date range: apartments, hotel rooms, cabins, glamping tents, boats and yachts, campers, cars, kayaks, equipment, or a coach’s calendar.
Key features
- 📅 Booking calendar on the product page – two months at a glance, unavailable dates greyed out, the price recalculated as the customer picks a range.
- 💰 Seasonal price lists – a separate rate per period and per year, so low and high season live side by side on one product.
- 🔁 Period rules – let customers book any interval, whole weeks starting on a chosen weekday, or nothing less than the entire period.
- 🛏️ More than one booking a day – give a price period a capacity and the same product sells to several customers at once: four pitches, six kayaks, ten seats on a tour. Leave it empty and the product stays a one-booking-a-day rental, priced per stay.
- 👥 Guests or units – decide whether the count is one cart line carrying the number of guests, or the WooCommerce cart quantity. On a period that has a capacity the count multiplies the price; on a period without one the price is for the whole stay.
- 🗂️ Reservations dashboard – every stay in one screen, grouped by month, with filters, per-night breakdown and order status changes.
- 🔔 Stay reminders and self-service cancellation – automatic e-mails before arrival and a signed link that lets the guest cancel without contacting you.
- 👀 Social proof on the product page – “someone just booked”, “X people viewed this in the last 24 hours” and occupancy badges, all optional.
Designed for real-world rental operations
📅 A calendar that reflects what is actually free
The calendar reads the price list and the existing reservations, so a customer only ever sees dates you can honour. Past days, days outside any price period and days already taken are unavailable — and a departure day may double as the next guest’s arrival day, so changeovers do not cost you a night. On a period with a capacity a day stays open until its seats run out, and the quantity selector narrows itself to the fewest free seats in the range the customer picked.
💰 Rates that follow the season
Every price list row covers a date range and holds its own nightly rate. A product can carry as many rows as the year needs — off-season, shoulder season, peak weeks — and each year is kept separately, so publishing next year’s rates does not disturb the current one.
🔁 Rules that match how you rent
Three period rules cover the usual rental patterns: Any range for flexible stays, Week for Saturday-to-Saturday charters, Whole range for a fixed event or a full-season lease. The rule is set per period, so the same product can be flexible in May and weekly in August.
👥 Pricing per property or per item
In guest mode the number of people is recorded with the reservation but does not change the price — the way an apartment or a house is sold. In unit mode the quantity multiplies the price and flows into the WooCommerce cart quantity — the way kayaks, bikes and gear are rented.
🗂️ One screen for the whole season
The Reservations dashboard reads bookings from its own table rather than from the order list, so a five-night stay is one row, not five. Cards are grouped by month and carry the guest, product, status, amount and night count. Filters narrow the view by guest, order, product, status and date range; a details modal shows the price of every single night, which reminders went out, and lets you move the order to another status.
🔔 Messaging that runs itself
Reminders go out 14 days, 7 days and one day before arrival — each point can be switched off separately. Every booking confirmation carries a cancellation link signed for that reservation alone, and a configurable cutoff (24 hours by default) decides how late a guest may still cancel. A confirmation e-mail closes the loop.
👀 Demand made visible
The optional Spectator Views module shows how much attention an offer gets: live viewers, recent bookings, a popularity badge above a view threshold you set, and an occupancy badge based on how full the coming weeks already are. Colours, corners and thresholds are configurable, and you can limit the whole thing to selected categories or products — or to administrators only while you try it out.
🛡️ Server-side validation
Availability and price are re-checked on the server when the item enters the cart and again before payment, so a stale page or a tampered request cannot book an occupied date or set its own price.
🌍 Translation ready and integration friendly
The plugin ships with a Polish translation and is ready for others through translate.wordpress.org, works with Polylang and WPML, and supports EU Omnibus price-history plugins.
Where everything lives in the admin
The plugin adds a BookingHive menu with four tabs, each with its own linkable URL: Global settings (admin.php?page=bookinghive&tab=general), Modules (&tab=modules), Support (&tab=support) and Partners and services (&tab=partners_and_services). The Reservations dashboard has its own entry in the same menu.
Every booking product gains a Price List tab in WooCommerce’s Product data box, next to Linked Products and Advanced. It holds the quantity mode and the changeover day for this product, a year switcher, the table of price rows — date range, rate, period rule, Edit and Delete — and an Add row button.
The Modules tab lists all three modules. Core is marked Always enabled and has no toggle: it is what registers the Booking product type, the price list, the calendar and the reservation logic, so the plugin has no purpose without it. Spectator Views and Stay Notifications can be switched off freely — their features leave the storefront and the admin, while their settings stay in the database and come back unchanged when the module is enabled again.
Changeover days, spelled out
By default the day a stay ends stays open for the next guest’s arrival, so a turnover costs you nothing — bear in mind the departure day is still billed to the departing guest, so that day is effectively sold twice. Rentals that need preparing between customers — a boat, a camper, a car — can switch Changeover day to Blocked for a service day, plugin-wide under BookingHive → Global settings or per product in its Price List tab. Either way a day in the middle of a stay is never offered, a departure day already claimed as someone else’s arrival closes as well, and a one-day booking blocks its whole day, being an arrival and a departure at once. The setting takes effect immediately, including for reservations already placed — so switching to Blocked for a service day can turn away, at checkout, a customer who already has a changeover day sitting in their cart.
What BookingHive does not do
- It does not talk to channel managers or external booking platforms, and sends no reservation or diagnostic data anywhere — everything stays in your own database.
- A reservation is a virtual product, so WooCommerce calculates no shipping for it. The checkout needs at least one payment method that accepts virtual orders — a bank transfer will do.
- Price periods on one product should not overlap. For a day covered by two rows the first matching row wins, which gets hard to predict once rows are edited — end one period the day before the next begins.
- Reminder e-mails ride on WP-Cron, which only fires when somebody visits the site. On a quiet shop, point a system cron at
wp-cron.phponce a day.
A new product type called Booking. Such a product gains a Price List tab in the admin, where you define date ranges with their nightly rates and booking rules, and a booking calendar on the storefront, where the customer picks a date range and sees the price recalculated instantly. Everything else — cart, checkout, orders, e-mails, reports — stays standard WooCommerce.
From the price list, on the server. Each selected day is charged at the rate of the price list row covering it, and the total is the sum of those days, the last selected day included. A range from 18 to 22 August at a rate of 512 therefore costs 2,560. The amount that arrives from the browser is never trusted: the plugin recalculates it from the stored price list before the item enters the cart.
Yes, and that is the point of the price list. Every row covers a date range and holds its own rate, so a single product can price off-season, shoulder season and peak weeks differently. Rows are kept per year, so next year’s rates can be prepared without touching the current season.
Three. Any range lets the customer book any interval inside the period. Week allows whole weeks only, starting on the weekday you choose — the usual pattern for boat charters. Whole range allows only the entire period, for a fixed event or a full-season lease. The rule belongs to the price list row, so one product can use different rules in different seasons.
Yes. It reads existing reservations and blocks dates held by orders in the processing, completed, pending and on-hold statuses. Cancelled, refunded and failed orders release their dates. A day that is only a check-out for one booking and a check-in for another stays available, so back-to-back stays are possible. Where a price period declares a capacity the calendar counts seats instead of blocking outright: the day closes only when they are all taken.
No. Availability is validated on the server when the product is added to the cart and again on the cart and checkout pages, and the reservation write itself is serialised: two checkouts completing at the same instant are processed one after the other, and each re-checks the dates immediately before saving. The first one takes the dates and the second is refused with a clear message, so a double booking cannot go through.
It depends on the price period. A period with a Capacity is sold per seat, so the count multiplies the price; a period without one is sold per stay, and the count is recorded for your information only. Declaring a capacity is the single switch for both — a shop that never sets one keeps the pricing it has always had.
The Quantity mode setting decides what the count means rather than whether it counts: Guests keeps the stay as one cart line carrying the number of people, Units makes the count the WooCommerce cart quantity, which suits renting several identical items. It is set globally and can be overridden on any product.
Yes. Put a Capacity on the price-list row — four pitches, six kayaks, ten seats — and the plugin counts how many are taken on each day instead of treating the day as free or blocked. A day is offered until its seats run out, the quantity selector on the product page cannot be raised above the fewest free seats in the selected range, and the same check runs again on the server when the product is added to the cart and once more, under a lock, as the order is saved. A customer asking for more seats than remain is told how many are left.
Capacity lives on the price-list row rather than on the product, so high season can offer a different number of places than low season. An empty field means one booking a day, which is how every price list written before this feature behaves.
On the Reservations screen the plugin adds to the admin menu. It lists stays rather than orders, grouped by month, with tiles for the totals and revenue, filters by guest, order number, product, status and date range, and a details modal holding the guest’s contact data, the price of every night, the reminders already sent and a control to change the order status.
Yes, if the Stay Notifications module is enabled. Every booking confirmation includes a cancellation link signed for that reservation, and a cutoff setting — 24 hours before arrival by default — decides how late it still works. A confirmation e-mail is sent once the cancellation goes through, and the released dates return to the calendar.
The interface is in English and ships with a Polish translation. Other languages come from the WordPress.org translation platform at translate.wordpress.org, where anyone can contribute them, and WordPress installs them on its own — nothing needs to be copied into the plugin folder. Multilingual sites are supported through Polylang and WPML.
No. No reservation or diagnostic data leaves the shop as part of normal operation: there is no call home to iLabs and no third-party service involved. Reminder and cancellation e-mails are sent by the shop’s own WooCommerce mail system, and the plugin does not synchronise with channel managers or external booking platforms.
Spectator Views and Stay Notifications, yes — under BookingHive → Modules, at any time. Their features leave the storefront and the admin while their settings stay in the database, so switching a module back on restores its previous configuration unchanged. Core cannot be turned off: it provides the Booking product type, the price list, the calendar and the reservation saving, so the plugin would do nothing without it.
Because the cutoff passed. The link is signed for one reservation and works only until the Cancellation cutoff (hours) setting is reached — 24 hours before arrival by default. After that it refuses the cancellation on purpose; that is the setting doing its job, not a broken link.
2.0.0 is a rewrite and it does not migrate 1.0.x data: price lists move from the booking_price_list_<year> product meta to bookinghive_price_list_<year>, and reservations from the {prefix}inspirelabs_bookings table to {prefix}bookinghive_bookings. Nothing is deleted, but 2.0.0 does not read the old names — so booking products come up with an empty price list, and dates already sold stop blocking the calendar until the reservations are re-created. Update on a copy of the shop first and write to kontakt@ilabs.dev; with so few 1.0.x installs left we will help move the data across by hand.
Write to kontakt@ilabs.dev, or visit https://bookinghive.ilabs.dev, where the user manual, the FAQ and technical support live. The same contact is repeated inside the plugin, under BookingHive → Support.
Categories
Plugin details
Tags on WordPress.org
