JetBooking Units Manager: Set Up a Hotel With Room Types and Units

The JetBooking Units Manager adds identical copies, called units, to one bookable post, so several guests can book that post for the same dates. Units have no price or description of their own, so they cannot stand for different room types. To model a hotel, create one bookable post per room type and give it as many units as you have identical rooms. Then make the hotel itself a non-bookable parent post, linked to its room types with a JetEngine relation.
- What the Units Manager does (and does not do)
- Plan the structure before you add content
- Step 1: Check the JetBooking settings
- Step 2: Create a room type and add its units
- Step 3: Link room types to their hotel
- Step 4: Build the single hotel page
- Step 5: Let guests book more than one unit
- How bookings land on units
- Common problems and fixes
What the Units Manager does (and does not do)
Every post in a booking post type is one bookable item. Without units, a post can be booked once per date range. When you add units, JetBooking treats the post as that many interchangeable copies. Five units means five guests can book the same dates before the item shows as unavailable.
Crocoblock's own multiple units tutorial describes the Units Manager as setting the available units for a specific room type. That is the mental model to keep:
- One post = one room type (for example, Deluxe Sea View).
- Its units = the identical rooms of that type (Room 101, 102, 103...).
- The Units Manager only gives each unit a title. There is no per-unit price or description field, so units use the post's price, gallery, description and meta fields.
A Standard room and a Suite with different prices therefore each need their own post.
Plan the structure before you add content
The hotel itself is not bookable. Guests book rooms, not the building. It goes into its own CPT, which you never select in the JetBooking settings, and it is linked to its room types.
For the room types you have two options, depending on your JetBooking version (see the JetBooking Dashboard Overview for the setting):
- Share your existing bookable CPT (any version). Put room-type posts into the same CPT as your standalone properties. To keep room types out of your main property archive, add a taxonomy (for example, Listing kind with the terms Standalone and Room type) and filter your archive query by it. If you already run a search page, our property search filter tip shows how such filters fit in.
- Create a separate bookable Rooms CPT (JetBooking 3.8.0 or later). Version 3.8.0 added booking for multiple CPTs, so the Booking instance post type setting can hold both Properties and Rooms. On older versions only one post type can be selected, and option 1 is the only choice. Archives stay apart without a taxonomy. Make sure the Rooms CPT also has a single template that contains the booking form.
| Post type | Bookable | Holds | Units |
|---|---|---|---|
| Hotels/Resorts (new) | No | One post per hotel: name, address, photos, amenities | None |
| Properties (Booking instance post type) | Yes | Standalone properties, plus room-type posts with option 1 | Room types get units; standalone properties usually have none |
| Rooms (option 2 only, 3.8.0+) | Yes | Hotel room-type posts | One set of units per room type |
Step 1: Check the JetBooking settings
- Go to WordPress Dashboard > Bookings > Settings > General.
- Set Booking mode to Plain, which stores units in your CPT posts. This guide uses JetEngine for the CPTs and the relation.
- Under Booking instance post type, select the CPT that holds your bookable items. With option 1, select Properties. With option 2 (JetBooking 3.8.0+), select both Properties and Rooms.
- Optionally pick a Booking orders post type if you want each form submission saved as an order post.
- Save.
Optional, on JetBooking 3.8.0 and later: under Bookings > Settings > Advanced, turn on Automatically switch bookings statuses. Set Target Status(es) to On hold, New Status to Cancelled, and Switch interval to Once Daily. Unpaid bookings are then cancelled and their dates free up again.
In WooCommerce based mode, units live on WooCommerce products of the JetBooking product type instead. That mode adds a Unit Selection checkbox, which lets guests pick a specific unit from a list, and an Allows the user to select the number of units to book option. If you turn on both, unit selection is disabled on the front end. The rest of this guide uses Plain mode.
Step 2: Create a room type and add its units
Example: a hotel has six identical Deluxe Sea View rooms.
- In your bookable CPT, add a new post called Deluxe Sea View. Fill in its price meta field, photos and description as you would for any property.
- Scroll down to the Units manager section and click Manage Units. The Available Units block opens.
- Click Add Units. In Number, enter 6. In Title, enter a label or leave it empty to use the post title.
- Click Add Units again. Six units appear in the Available Units list at once.
- Use Edit on each unit to rename it to a real room number (Room 101, Room 102...). Use Delete to remove a room taken out of service.
- Publish or update the post.
Repeat this for every room type: Standard Double with 12 units, Family Suite with 3 units, and so on. Standalone properties need no units.
Step 3: Link room types to their hotel
- Create a Hotels/Resorts CPT with JetEngine. Do not select it in the Booking instance post type setting.
- Create a JetEngine relation of the one to many type. Set Hotels/Resorts as the parent and the CPT that holds your room types as the child. Turn on Register controls for child object, so the box for picking a hotel appears on the room-type edit screen.
- Open each room-type post and connect it to its hotel in that box. Standalone properties stay unconnected.
One to many fits because a hotel has many room types, while each room type belongs to one hotel. Our tip on showing related items on a single post with a JetEngine relation covers the display side; the same pattern works with related posts.
Step 4: Build the single hotel page
The hotel page shows the hotel's details plus a grid of its room types. These steps use Elementor.
- Create a listing item template for the room-type CPT. Add the room-type title, image and price (a Dynamic Field showing your price meta key).
- Add a widget that supports dynamic tags, such as Heading. Choose the JetEngine tag JetBooking: Units count and set After to " units left". JetBooking 3.8.3 changed how this tag displays available and booked counts, so check what it shows for a fully booked room type in your version.
- Add a button that links to the post's permalink. Each room type's single page holds the booking form. If you have not built that page yet, follow our JetFormBuilder booking form tip for a rental property.
- In the Hotels/Resorts single template, add a Listing Grid that uses this listing item, and set it to show the posts related to the current hotel through your relation.
In the block editor, use the Booking Units Count macro %booking_units_count% through Dynamic Content > Custom data instead of the Elementor tag.
Open a hotel on the front end. You should see each room type with its price and its units count.
Step 5: Let guests book more than one unit
Booking several units in one form was added in JetBooking 3.8.0, so update the plugin if you do not see the options below. Edit the booking form in JetFormBuilder > Forms.
Add the unit-number field
- Add a Number Field and name it
unit_number. Set its minimum to 1. - For MAX VALUE, click the database icon and set SOURCE to Post, GET POST ID FROM to Current Post and POST PROPERTY to Post Units Number. Guests can then never request more rooms than the room type has.
- Give the field the Dynamic Visibility condition Apartment has Units. It shows only when the post has more than one unit, so standalone properties never show it.
Multiply the price
In your Calculated Field, multiply the nights by the price by the number of units:
%FIELD::_dates%*%META::_apartment_price%*%FIELD::unit_number%Replace _apartment_price with your own price meta key, unit_number with your Number Field's name, and _dates with the name of your check-in/check-out field.
Add the hidden fallback
On posts without units, the Number Field is hidden, so the total becomes 0. Fix this with a Hidden Field:
- Give it the same FORM FIELD NAME,
unit_number. - Set it to Manual Input with the value 1.
- Add the opposite visibility: Hide element if condition met with Apartment has Units.
Turn on multi-unit booking
- Open the Apartment Booking post submit action and enable Booking multiple units.
- In CAPACITY FIELD, select
unit_number. - If you set a Booking orders post type in Step 1, the form also needs the Insert/Update Post action.
Test it by booking two units. If fewer rooms are free than requested, the form shows: Not enough available units. Only n available.
How bookings land on units
- Each new booking is assigned automatically to the first or next available unit of that room type.
- To move a guest to a different room, open the booking in Bookings and change the unit in the Edit Booking pop-up.
- With multiple units enabled, one booking is created per unit. A two-room order shows as two rows in the Bookings list, with columns for ID, Instance, Unit, Check In, Check Out, Related Order, Status and Actions. With a Booking orders post type set, both rows link to the same order post.
Common problems and fixes
- Different room types stored as units of one post. Units have no price or description fields, so they all use the post's. Split them into separate room-type posts.
- Room-type CPT is not bookable. If you created a separate Rooms CPT, add it to the Booking instance post type setting in Bookings > Settings > General and keep Properties selected too. Selecting several post types needs JetBooking 3.8.0 or later; on older versions, move room types into your existing bookable CPT.
- No box for linking a hotel on the room-type screen. Edit the relation and turn on Register controls for child object.
- No Units manager section on the edit screen. Check that the mode is Plain and that the post you are editing belongs to a post type selected under Booking instance post type.
- Total price shows 0. The hidden fallback field with value 1 is missing or has the wrong name.
- Units counter looks wrong. Older Crocoblock documentation says the counter only counts bookings with the On hold and Completed statuses, and JetBooking 3.8.3 changed what the tag and macro display. Check the booking statuses in the Bookings list and what the tag outputs in your version.
- Bookings disappeared after cleaning up orders. When a Booking orders post type is set, deleting an order post removes every booking linked to it. Cancel bookings instead of deleting orders.
With one post per room type, units for the identical rooms and a non-bookable hotel parent, you can add as many hotels as you like next to your standalone lets. If you would rather have this structure built for you, post a request on BoostMyCroco.
Frequently Asked Questions
Can one JetBooking post represent a whole hotel?
Can I use two different post types for booking in JetBooking?
Can units of the same post have different prices?
Can guests choose a specific room number when booking?
Why does my units left number not change after a booking?
This guide answers a question from our community: Units Manager
Sources
- How to Set Multiple Units Booking in Plain Mode — JetBooking (crocoblock.com)
- JetBooking Dashboard Overview — JetBooking (crocoblock.com)
- How to Showcase Booking Units — JetBooking (crocoblock.com)
- [JetBooking] Multiple bookings in the same form · Issue #2352 · Crocoblock/suggestions · GitHub (github.com)
- [JetBooking] Booking multiple units / instances of an object (appartment) in one go · Issue #5948 · Crocoblock/suggestions · GitHub (github.com)
- JetBooking Overview (crocoblock.com)
- How to Manage Units via the WordPress Dashboard — JetBooking (crocoblock.com)


