Description
Met Hotel Booking turns a WordPress site into a working hotel reservation system. Guests search by dates and party size, see only the rooms that are genuinely free, and book them at a price your server calculated — never one the browser sent.
It is built for how a hotel actually sells: a night out of a pool of identical rooms, not a time slot belonging to a member of staff.
How a stay is sold
Search Results Checkout Confirmation. Four pages, created for you by the setup wizard, each one a shortcode and a Gutenberg block.
Every page is server-rendered, so rooms and prices are in the HTML your visitors and search engines receive, the search URL is shareable, and the whole flow works with JavaScript switched off.
Availability that cannot overbook
Availability is not recalculated from your booking list on every search. Each room type carries one row per date holding what is total, sold, held, blocked and left.
That is what makes the booking safe. Taking a stay is a single conditional database statement inside a transaction: if the rooms are no longer there, the booking is refused rather than written. Two guests racing for the last room get one booking and one honest “sold out”, not two bookings and an apology in the morning.
While a guest fills in the checkout form, their rooms are held — not quietly left on sale for somebody else — and an abandoned checkout hands them back automatically.
Core features
✅ Rooms, not services — Room types with their own unit count, occupancy, gallery, amenities and public page at /rooms/your-room/
✅ A real availability calendar — One editable grid of nights. Block a date, stop arrivals, change what is on sale, in bulk or one cell at a time
✅ Pricing that follows the calendar — A base rate, then rate rules for weekends, seasons and special dates, materialised onto the nights they apply to
✅ Taxes and fees — Percentage or fixed, compounding in the order you set, with hotel-collected fees kept out of the online total
✅ Bookings admin — List, filter, create and edit stays; confirm, check in, check out, complete, cancel or mark a no-show, each one writing its own history
✅ Calendar view — A month occupancy grid, and a day view of arrivals, departures and who is in-house
✅ Guest dashboard — /my-bookings/, reached by an account or by the signed link in a guest’s own confirmation email, where a guest can view and cancel a stay
✅ Email notifications — Nine events, editable per recipient, and a log on every booking of exactly what was sent and when
✅ Payments — Stripe, plus pay at hotel, bank transfer and cash on arrival. Payment attempts are recorded, not only successes
✅ Cancellation policy — Snapshotted onto the stay at the moment it is sold, so changing your terms never rewrites terms a guest already agreed to
✅ Dashboard — Occupancy, ADR, RevPAR, today’s arrivals and departures, and revenue attributed per night
✅ SEO out of the box — Title, canonical, Open Graph, HotelRoom JSON-LD with an offer, and sitemap entries for every room and hotel page, standing down cleanly where Yoast or Rank Math is already acting
✅ Setup wizard — A few short steps from activation to a bookable room
✅ Theme-overridable templates — Copy any template into yourtheme/met-hotel-booking/ and it wins
What the money never does
A stay stores what it was sold for — the rate for each night, the taxes, the terms. Nothing re-derives it later from today’s price list, so an invoice a guest is holding stays the invoice you issued.
Met Hotel Booking Pro
The free plugin runs a single hotel end to end. Pro adds:
- Multiple properties and location-first search
- Add-ons and meal plans
- Coupons
- Deposits and partial payment
- Seasons and rate plans, with minimum and maximum stay
- Several cancellation policies, and a refundable filter for guests
- Guest reviews, tied to a stay that really happened
- Room numbers — assign an actual key, guarded against double assignment
- Custom checkout questions
- Reminder emails and review requests
- PDF invoices
- Advanced reports and CSV export
- Elementor widgets
- Webhooks
- Google Calendar and iCal channel sync (Airbnb, Booking.com and anything else that speaks
.ics) - PayPal and WooCommerce checkout
Privacy Policy
Met Hotel Booking stores booking and guest data in your own WordPress database. It does not send that data anywhere except where a feature you have switched on requires it — see External Services below.
Guest-facing pages that show personal data — the confirmation receipt, the cancellation link and the guest dashboard — are gated by a token issued with the booking. A booking reference on its own never opens them.
The plugin records the IP address and browser of the device that made a booking, as booking metadata, for fraud and support purposes. That information is never included in anything the plugin sends to a third party.
External Services
This plugin connects to the following third-party services. Each one is used only for the feature named.
- Stripe API
Used to take card payments, and only when you have entered Stripe keys and enabled card payment. Payment and booking details are sent from your server tohttps://api.stripe.com. On the checkout payment step, and on a confirmation page with a balance still to pay by card, the guest’s browser loads Stripe.js fromhttps://js.stripe.comso card details go straight to Stripe and never touch your server; it is not loaded on any other page, or when card payment is off. Stripe also sends payment events back to a webhook endpoint on your site, which are rejected unless they carry a valid signature.
Provider: Stripe
* Stripe Terms of Service
* Stripe Privacy Policy
- OpenStreetMap
Used in two places. In the admin, the map picker used to set a hotel’s position loads map tiles fromhttps://*.tile.openstreetmap.organd sends the address you type, or the point you click, tohttps://nominatim.openstreetmap.orgto look it up. On the frontend, a hotel page can embed a map frame fromhttps://www.openstreetmap.org— only when you switch on Settings > Display > Embedded map, which is off by default. When it is on, the visitor’s browser loads the frame on a hotel page that has a map pin, and OpenStreetMap receives the visitor’s IP address and the hotel’s coordinates. When it is off, the address is a plain link that opens the map only if the visitor clicks it.
Provider: OpenStreetMap Foundation
* OpenStreetMap Terms of Use
* OpenStreetMap Privacy Policy
* Nominatim Usage Policy
Support
If you need help or have questions, please use the WordPress.org support forum for this plugin.
Settings > Tools carries a status report — versions, tables, pages, URLs and scheduled jobs — which is the most useful thing to quote when opening a ticket.
Source Code
The compiled scripts and styles in public/build/ are built from the human-readable source shipped in src/resources/. To rebuild them, run npm install and then npx wp-scripts build from the plugin folder; package.json and webpack.config.js are included for this.
Additional Information
For documentation and support, please visit the plugin website.
Blocks
This plugin provides 5 blocks.
- Hotel Search Form The room search form: dates, guests, rooms and an optional location, pointed at the results page.
- Hotel Checkout Guest details, the stay reviewed and the payment methods the hotel accepts.
- Met Hotel Login Form Standalone login form for guests and agents (login, forgot password, reset password).
- Hotel Booking Confirmation The guest's receipt, opened from the secure link in their booking e-mail.
- Hotel Search Results Available rooms for the dates in the page URL, with filters and sorting.
Installation
Minimum Requirements
- WordPress 6.5 or greater
- PHP version 8.0 or greater
- MySQL version 5.7 or greater (or MariaDB 10.3+)
- Pretty permalinks enabled — plain permalinks break every room and hotel URL
Automatic Installation
- Log in to your WordPress dashboard
- Navigate to Plugins > Add New
- Search for “Met Hotel Booking”
- Click “Install Now” and then “Activate”
Manual Installation
- Download the plugin ZIP file
- Log in to your WordPress dashboard
- Navigate to Plugins > Add New > Upload Plugin
- Choose the downloaded ZIP file and click “Install Now”
- Activate the plugin through the ‘Plugins’ menu in WordPress
Configuration
The setup wizard opens by itself the first time you visit the plugin dashboard. It creates the four booking pages, takes your hotel’s details, and walks you through your first room type.
You can re-run it at any time from Settings > Tools, and nothing you have configured is cleared when you do.
FAQ
-
How do guests book a room?
-
The setup wizard creates four pages — search, results, checkout and confirmation. Each one is a shortcode (
[met_hotel_search],[met_hotel_results],[met_hotel_checkout],[met_hotel_confirmation]) and a Gutenberg block, so you can move them onto pages of your own design at any time. A fifth page, the guest dashboard ([met_hotel_guest_dashboard]), shows a signed-in guest their bookings and everyone else the login form. -
Can two guests book the last room at the same time?
-
No. Rooms are taken inside a database transaction with a conditional update, so one booking succeeds and the other is told the room has gone. The rooms are also held while a guest is filling in the checkout, and released automatically if they never finish.
-
Does the booking flow work without JavaScript?
-
Yes. Search is a real form, results are rendered on the server, and the checkout is a form post. JavaScript only enhances what is already there.
-
How many rooms and room types can I add?
-
As many as you need. There is no limit on rooms or room types.
-
Can I charge different prices on different dates?
-
Yes. Set a base rate per room type, then add rate rules for weekends, seasons or specific dates. You can also type a price straight onto a single night in the pricing grid, and a later change to the base rate will not overwrite it.
-
Can I take payment online?
-
Yes, through Stripe. You can also offer pay at hotel, bank transfer and cash on arrival, alone or alongside a card. Pro adds PayPal and WooCommerce.
-
Do I need a separate page for each room?
-
No. Every room type already has one at
/rooms/your-room-slug/, and every hotel at/hotel/your-hotel-slug/, with their own gallery, amenities, price and SEO tags. No custom post type is registered and nothing is duplicated. -
Can I change how the booking pages look?
-
Yes, in two ways. Settings > Design changes the colours and button shape, and any template can be overridden by copying it into
yourtheme/met-hotel-booking/. Your copy wins and survives plugin updates. -
Can a guest cancel their own booking?
-
Yes, from
/my-bookings/, if your cancellation policy allows it at that point. Cancelling puts the room back on sale immediately and sends the emails you have configured. -
Is guest data sent anywhere?
-
Only what a payment needs, and only to Stripe. Everything else lives in your own database. One optional feature loads something from a third party in the visitor’s browser, and it is off until you switch it on: the embedded map on hotel pages (OpenStreetMap). See External Services below. The confirmation page, the cancel link and the guest dashboard are all gated by a token, so a booking reference alone is never enough to read somebody’s details.
-
Will this work for appointments, salons or car rentals?
-
No. This plugin sells nights out of a pool of rooms. If you need time slots and staff schedules, use an appointment plugin instead.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Met Hotel Booking” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Met Hotel Booking” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.0.0
- Added: First release.
- Added: Room types with unit counts, occupancy, galleries, amenities and their own public pages.
- Added: Per-date availability with total, sold, held and blocked counts, and a transactional booking that cannot overbook.
- Added: Hold engine — rooms are claimed while a guest is at the checkout and released automatically if the checkout is abandoned.
- Added: Search, results, checkout and confirmation pages as shortcodes and blocks, all server-rendered and working without JavaScript.
- Added: Availability grid and pricing grid, with single-cell and bulk editing.
- Added: Rate rules for weekends, seasons and special dates, plus taxes and fees.
- Added: Bookings admin — list, filters, create, edit, status history and internal notes.
- Added: Month occupancy calendar and a day view of arrivals, departures and in-house guests.
- Added: Guest dashboard at /my-bookings/ with token-gated viewing and cancellation.
- Added: Nine email events, editable per recipient, with a delivery log on every booking.
- Added: Stripe, pay at hotel, bank transfer and cash on arrival.
- Added: Cancellation policy, snapshotted onto each stay when it is sold.
- Added: Dashboard statistics — occupancy, ADR, RevPAR and today’s movements.
- Added: SEO head tags, HotelRoom JSON-LD and sitemap entries for room and hotel pages.
- Added: Setup wizard.
- Added: Theme-overridable templates in yourtheme/met-hotel-booking/.
- Added: Optional removal of all plugin data when the plugin is deleted, off by default, under Settings > Tools.
