Author Archive

Listeo Booking Plus Changelog

23/06/2026

1.0.10

New
  • Start/end time selection for rentals in the booking popup (respects 12h/24h format and interval; reflected in availability, price, and saved booking). Also works for resource bookings.
Updated
  • Booking popup re-validates listing-level blocks on the server (owner bookings and iCal imports are now blocked even on a forced or stale request).
Fixes
  • Date-range calendar now greys out rental dates imported from iCal feeds (previously skipped for the date-range type; checkout/turnover day stays bookable).
16/06/2026

1.0.9

Updated
  • Booking-widget rating now uses the same source as the rest of the site (_combined_rating via listeo_get_rating_display()); no more mismatch like 4.3 in the widget vs 5.0 on the page.
Fixes
  • Events, recurring event on classic widget, widget expiration, and showing date if listing is in the past.
14/06/2026

1.0.8

New
  • Features
  • Sidebar booking widget (type-aware CTA). The popup's old bare "Book Now" button is replaced by a rich, listing-type-aware card that opens the booking popup:
  • Service: host card + rating, 7-day availability strip, "next free slot" tag.
  • Rental: price/night header, 7-day strip, constraints tag (min nights, units).
  • Event: from-price + tier names + next occurrences with ticket scarcity.
  • Every element (button, strip day, occurrence row) opens the popup and pre-seeds its pickers. Data layer in class-lbp-booking-widget.php; theme-overridable markup at
  • templates/booking/widget.php. 10-minute availability cache, auto-flushed on booking insert/cancel.
  • Per-listing "Use booking popup for this listing" opt-in (admin checkbox, meta _lbp_enable_popup). Forces the popup on for a single listing regardless of the global toggle; unchecked
  • follows the global setting. Resource listings always use the popup. Loaded on both free and premium tiers.
  • Booking widget microcopy settings (new "Booking Widget Notes" section, on both tiers): toggle/customize the "You won't be charged yet" note (service/rental) and the event-widget note.
  • Listings that charge immediately never show the charge note.
Improved
  • Manual multi-slot extendable cue. In multi-slot mode without a duration-service, the adjacent (prev/next) slots now get the dashed "tap to add" lbp-slot-extendable affordance, matching what the click handler already accepts. Brings the popup/grid path in line with the classic dropdown picker.
  • Event ticket "Coming soon" badge. Long localized on-sale dates no longer stretch the ticket card; the badge shows short "Coming soon" with the full date in a hover/focus tooltip and
  • aria-label.
  • Shared blocked-dates computation. Refactored compute_blocked_dates() so the AJAX endpoint and the widget's 7-day strip always agree on bookable days.
Fixes
  • Corrupted slot separators healed. Slot strings are now saved with JSON_UNESCAPED_UNICODE and normalized (en/em dash → hyphen; the literal u2013/u2014 left by the prior encode/unslash
  • bug healed back to -). Previously a non-ASCII separator could store as u2013, making slot times unparseable and blocking all bookings on a listing. Applies to listing saves, resource
  • saves, and the "import from listing" path.
Security
  • iCal export feed now HMAC-token authenticated (was an unauthenticated PII leak); subscribe URLs rotate.
  • CSRF nonces on iCal add/remove/refresh AJAX; SSRF hardening via wp_http_validate_url.
  • Popup respects "Allow booking without login" (Login-to-Book button + AJAX rejection); guest checkout registers a proper "guest" account with captcha/terms/welcome-email; email
  • force-required; price breakdown escaped; currency-symbol entity decode fix; dark-mode stepper fix; clock-format (12/24h) summary fix; resource slot-capacity respected.
11/06/2026

1.0.7

New
  • Guest checkout in the popup now registers a WordPress account with role "guest" instead of saving the booking with no author. Includes username/password fields per Theme Options, reCAPTCHA v2/v3, hCaptcha and Turnstile verification, Privacy Policy and Terms checkboxes, welcome email, and optional auto-login. If the email already has an account, the popup asks the customer to log in.
Updated
  • Booking popup now respects the "Allow user to book without being logged in" theme option. When it's disabled, logged-out visitors see a "Login to Book" button instead of the booking popup, and the booking/ticket-hold AJAX endpoints reject logged-out submissions outright.
  • Email is now force-required in the popup for logged-out guests.
  • Resource cards also swap their Book buttons for "Login to Book" when login is required; next-available slot chips render as plain text.
Fixes
  • Captcha verification requests (reCAPTCHA v2/v3) now use POST so the secret key never appears in server access logs.
  • Guest passwords are no longer altered by text sanitization before hashing.
  • Price breakdown amounts are HTML-escaped before rendering in the popup summary.
10/06/2026

1.0.6

New
  • Resource Types per listing type — define multiple named resource types (e.g. Service → Barbers, Cars), each with its own labels and Fields Builder tab.
  • Listing owners/admins pick a resource type when creating a listing (auto-selected when only one exists).
  • Admin approval for resources — new options "Admin approval required for new/editing resources".
  • Approve / Reject actions for resources in wp-admin (dedicated Actions column + bulk actions), mirroring listings.
  • Pending count badge on the "Booking Resources" admin menu item.
  • Admin email notification when a new resource is awaiting approval.
  • Resource submission success screen shows an "awaiting admin approval" message when pending.
  • Listing Types list shows which types have resource types defined.
  • Coupons now apply to resource bookings — promo-code field in the booking popup, validated against the listing's coupons (admin/owner scope), with the discount shown in the breakdown and applied to the order.
Improved
  • Resource form now loads the fields and labels of the selected resource type (per-type Submit Builder / Fields Builder config).
  • Resource type is locked once a listing has resources to prevent orphaned fields.
  • Reject captures an optional reason and emails the resource owner.
  • Booking summary "Extras" row now shows a compact count with the itemized list (and prices) on hover.
  • Coupon UI restyled to match the classic widget (joined input/Apply, green confirmation, dashed code chip); success message auto-dismisses and the form collapses after applying.
  • Service duration surfaced in the classic widget for multi-slot bookings.
  • Resource bookings now respect Listeo Core's "15 minutes lock after booking" option (resource-aware).
  • The Book Now button's post-booking lock is now tied to the same lock option.
Updated
  • Listing types with booking type "None" no longer show booking sections/meta in the resource form or resource list.
Fixes
  • Fixed resource thumbnail mismatch between the listing resource cards and the booking popup (featured image used first).

1.0.5

New
  • New: "+N more" chip on resource cards when a resource has more tags than fit; the detail popup lists them all.
  • New: shareable resource links — #lbp-resource-detail-{id} URLs now auto-open that resource on load; the whole card is clickable (Book button still opens booking directly).
  • New: mobile sticky footer "Book Now" opens the booking popup when it applies (was scrolling to the old widget).
Fixes
  • Fix: resource card "From $X" now matches between the listing card and the booking popup (was higher in the modal); honors required/Individual services.
  • Fix: Date & Time step now blocks "Next" and shows an inline message when the selected slot is unavailable (no longer only at Confirm).
  • Fix: date picker defaults to the first available day instead of an unavailable/disabled date.
  • Fix: selected time-slot now uses the popup Accent Color (was hardcoded).
  • Fix: popup calendar weekday/month names now localized to the site language.
  • Fix: per-resource guest limits — adults can no longer exceed the resource's max; Children/Pets pickers hide for resources that don't allow them.
  • Fix: dark-mode service price pills restyled (were washed-out light chips).

1.0.4

Fixes
  • Various fixes

1.0.3

Changes
  • Per-service duration shown in booking popup picker + confirm summary (only when set)
  • Hour pickers honor listeo_clock_format (12h / 24h)
  • Resource Book button seeds picker with next_slots[0].date instead of always defaulting to today
  • Detail popup with no gallery collapses to single-column 560px card (is-no-gallery modifier)
  • Resource detail popup gets a per-day Hours section; card hides chip when hours are non-uniform
  • "This listing has Spaces" info box + dropzone elements + status chips dark-mode styled

1.0.2

New
  • Added Missing Translation template (*.pot)
  • Added Dark Mode support
  • Added Option to turn on Popup Widget even for regular listings without resource (Listeo Core -> Booking)

1.0.1

Changes
  • First update release, thanks for choosing Listeo Booking Plus!

Managing Resources from the Front-End

Owners can manager their booking resources the same way they already control listing. On plugin activation, Listeo Booking Plus will  automatically create a Manage Resources page and set correct content and template for that. In case it didn’t happen, here’s instruction

Setting up the page

  1. Create a new page (e.g. “Manage Resources”).
  2. Drop the shortcode in:
   [lbp_manage_resources]
  1. Add the page to the owner’s dashboard menu (you can configure the dashboard menu under Listeo Core → Pages → Resource page).

What owners can do from this page

  • Submit a new resource
  • Edit any of their own resources.
  • Duplicate a resource to spin up a near-identical one quickly.
  • Import/Export iCal – import or export bookings to their personal calendar
  • Pause a resource — temporarily takes it out of the booking pool without deleting it.
  • Delete a resource permanently.

Each resource has its own availability calendar and its own iCal export / import URLs. This mirrors Listeo Core’s per-listing iCal flow — if you already use it for listings, the resource version will feel identical.

Each resource gets its own subscribe URL so external calendars (Google, Apple, Outlook, Airbnb, Booking.com) always see the right slice of the schedule.

Exporting a resource’s bookings

  1. Open the Manage Resource page for your listing
  2. Find the iCal Export section.
  3. Copy the subscribe URL.
  4. Paste it into Google Calendar (Other calendars → From URL), Apple Calendar (File → New Calendar Subscription), or any iCal-compatible app.

The feed updates every time the external app re-fetches it (the cadence is controlled by the receiving calendar — typically a few hours).

Importing external calendars into a resource

  1. In the iCal Import section, click Add Calendar.
  2. Enter a friendly name (e.g. “Airbnb — Apartment 4”) and the external .ics URL.
  3. Save.

Listeo Booking Plus pulls events from each imported URL on a schedule and creates blocked bookings on the resource. Imported events are tagged so a later re-fetch can update or remove them cleanly without disturbing real bookings.

Conflict rules

  • A booking from your site always wins — imported events never overwrite an existing booking.
  • An imported event that overlaps with an existing import is updated, not duplicated.
  • Removing an imported calendar removes only its events; manually-added bookings stay put.

Recurring Events

If you run the same event every week, you don’t need to create 52 listings. Listeo Booking Plus generates occurrences from a single rule and lets you override any individual date without touching the rule itself.

Defining a recurrence rule

  1. Edit an Event listing.
  2. Scroll to the Recurrence meta box.
  3. Pick a pattern: Daily, Weekly, Monthly, or a Custom rule.
  4. For Weekly, pick the days of the week. For Monthly, pick the day-of-month or a Nth-weekday rule.
  5. Set the start date and (optionally) an end date.
  6. Save.

How occurrences are generated

A background cron job materialises future occurrences up to the Recurrence lookahead window – 12 months by default, configurable in Listeo → Settings → Booking. As time passes, the cron extends the window so there’s always ~12 months of bookable dates ahead.

You don’t need to “regenerate” anything manually — saving the listing triggers an immediate refresh of upcoming occurrences.

Per-occurrence overrides

Sometimes one specific date needs to be different — a higher price for New Year’s Eve, a smaller capacity because half the venue is being renovated, or just cancelling a single class because the instructor’s on holiday.

  1. In the Occurrences panel on the listing edit screen, find the date you want to change.
  2. Click Override.
  3. Set the override price, override capacity, or Cancel this occurrence.
  4. Save.

The recurrence rule itself stays unchanged — the override applies only to that one date. Remove the override and the date falls back to the rule’s defaults.

What customers see

The single-event page shows a date picker with all upcoming occurrences. Cancelled occurrences disappear; occurrences with overridden prices show the override price; sold-out occurrences are greyed out.

 

Event Listings & Ticket Types

Listeo Booking Plus turns Listeo’s Event listing type into a real ticketing system. You can define multiple ticket types per event, set capacity per type, control sale rules, and (optionally) collect attendee details at checkout.

Defining ticket types

  1. Edit an Event listing.
  2. Scroll to the Ticket Types meta box.
  3. Click Add ticket type for each tier — for example: Adult, Child, VIP, Early Bird.
  4. For each tier set:
    • Label — what customers see (“Adult”, “VIP”).
    • Price — per-ticket price in your store currency.
    • Capacity — how many of this ticket type are available. Leave blank for “as many as the event capacity allows”.
    • Min & Max – set how many tickets user could buy at once.
    • Sales Start and Sales End date – when tickets will be available

How capacity works

Booking Plus respects two capacity limits at the same time: the per-ticket-type capacity (the cap you set on each tier) and the event total capacity (Core’s listing-level field). Whichever is reached first stops sales for that tier.

Example: an event with total capacity 100 and a “VIP — 20 tickets” tier. Once 20 VIP tickets are sold, the VIP tier shows as sold out even if total ticket sales are well below 100.

The front-end ticket selector

Customers see a quantity selector per ticket type. They can mix tiers in a single booking (2 Adult + 1 Child + 1 VIP), and the booking summary breaks each line out for transparency.

Collecting attendee names and emails

Toggle Collect attendee names and / or Collect attendee emails in Listeo Core  → Listeo Booking Plus Settings. When on, the confirmation step shows one name (and / or email) field per ticket. Names appear on the individual e-tickets; emails are stored against the booking so each attendee can be contacted directly.

 

Reservation holds

When a customer clicks “Book” and lands on the confirmation step, Booking Plus puts a temporary hold on the tickets they’ve selected. While the hold is active, those tickets are invisible to other customers — the inventory shows fewer seats, and the ticket selector won’t let anyone else buy them.

If the customer completes checkout, the hold becomes a real booking. If they abandon the page (or the timer runs out), the hold expires and the seats go back into inventory.

Configuration

  • Reservation hold time (minutes) — Listeo → Settings → Booking. Default: 15.
  • Raise it if your checkout requires a slow third-party step (a complex payment redirect, a manual approval).
  • Lower it on high-demand events where seats need to recycle quickly when checkout is abandoned.

What happens when a hold expires

The customer doesn’t get an aggressive error — when they submit the form, the system re-checks availability and tells them politely that their hold expired and to pick again. No silent overselling.

Individual ticket codes

When Generate individual ticket codes is on (default), Booking Plus creates one unique scannable code per ticket — not per booking. A family that buys 4 tickets gets 4 codes.

Where customers see their codes

  • In the booking confirmation email.
  • On the booking detail page in their dashboard.
  • Each code includes a QR for the door scanner.

Why per-ticket and not per-booking

Door scanning works ticket-by-ticket: each attendee can arrive separately, get their own code scanned, and the system marks just that ticket as used. With one code per booking, a single scan would either let the whole family in (no count) or block subsequent scans (annoying).

If you really do want per-booking codes (small private event, you trust the headcount), switch the setting off and the legacy single-code-per-booking behaviour comes back.

The Booking Popup – Appearance & Steps

The booking popup is the customer-facing modal used by every booking type — Services, Rentals and Events. Booking Plus replaces Listeo Core’s inline booking widget with this multi-step popup whenever the listing is configured to use Booking Plus features (resources or ticket types).

The steps

# Step When it appears
1 Resource  When the listing has resources attached. Picks which resource to book.
2 Date/time Always. Picks the date(s) and (for time-aware bookings) the time slot.
2 / 3 Tickets Event listings. Pick ticket types and quantities.
Last Confirm Always. Reviews the booking, collects guest info, optional attendee details.
Last+1 Success After a successful booking. Shows confirmation + next steps.

Customising appearance

Three colors in Listeo → Settings → Booking → Booking Popup Appearance control the look:

  • Popup sidebar — color — main sidebar background. Defaults to #2d2d32 (close to black).
  • Popup sidebar — gradient end (optional) — set this for a gradient sidebar; leave blank for solid.
  • Popup accent color — used for the dot before each section label, the active step number, the “Next” button, and selection highlights. Defaults to #3b82f6 (blue).

Values are injected as CSS custom properties before the popup paints — no flicker of the old color when the page loads.

Mobile behaviour

The popup goes full-screen on mobile and the multi-step navigation collapses to a top progress bar. Sidebar content moves to a collapsible header so the form always has the full screen width.

Overriding the templates in a child theme

Every step is a separate template file you can override (see  Customizing Templates):

  • templates/booking/modal.php — the popup shell.
  • templates/booking/modal-sidebar.php — the left sidebar.
  • templates/booking/modal-step-datetime.php
  • templates/booking/modal-step-resource.php
  • templates/booking/modal-step-confirm.php
  • templates/booking/modal-step-success.php

Services – Durations, Individual Services & Slot Spans

For Service listings,  Listeo Booking Plus adds two opt-in features that change how the booking widget interprets service selections.

Service durations

Off by default. Turn on with Enable service durations in Listeo Core → Booking.

When on, each bookable service on a listing gains a Duration field. Set a duration in minutes (e.g. 90 for a 90-minute massage), and when a customer picks that service the booking widget reserves enough consecutive slots to cover it.

Example with 30-minute slots:

  • Customer picks a 90-min service starting at 10:00.
  • Booking widget blocks 10:00, 10:30 and 11:00 — three consecutive slots.
  • No other customer can book any of those three slots, even though only one was “selected”.

This is the right model whenever a service is longer than your underlying booking grid.

Individual Services

Off by default. Turn on with Enable Individual Services in Listeo Core → Booking.

When on, each service has an Individual service toggle. The rule:

  • A customer can pick at most one Individual service per booking.
  • They can stack as many non-Individual services as they like on top — these act as add-ons.

The model: an Individual service is “the appointment” (haircut, massage, consultation); non-Individual services are “the add-ons you can tack on” (scalp treatment, hot towel, extra 15 min). This matches how most service businesses actually quote work.

If you don’t sell anything that fits the “main + add-on” pattern, leave this off – the regular Listeo Core behaviour applies and customers can pick any combination.

Slot spans

When service durations are on, the underlying mechanism is called slot spans — the booking record itself stores the span (start slot + number of slots) so that conflict checks, the calendar and emails all see one logical booking spanning multiple slots rather than several separate ones.

You don’t configure slot spans directly — they’re how durations get expressed under the hood. The main effect for you is that the bookings admin shows one row per booking (not one per slot), which keeps the list readable.

Pricing Extras & Repeatable Fees

Listeo Booking Plus extends Listeo Core’s pricing with repeatable fees — costs that scale with the booking instead of being a flat add-on.

What’s a repeatable fee?

Any cost that’s calculated per unit-of-something. Common examples:

  • Per-guest fee — $5 per guest on a tour or event.
  • Per-night cleaning fee — $25 per night on a rental.
  • Per-attendee surcharge — VIP service fee charged per ticket.

Compare to a flat fee (Listeo Core’s existing feature), which is the same regardless of party size or length of stay.

Adding a repeatable fee

  1. Edit the listing.
  2. In the pricing / extras section, find Repeatable Fees.
  3. Click Add fee and set:
    • Label (shown in the booking summary).
    • Amount per unit.
    • Unit — guest, night, ticket, hour, etc.
  4. Save.

Updating the Listeo Booking Plus

Normal updates

Once your license is activated, Booking Plus updates show up on Plugins → Updates like any other plugin. Click Update and you’re done.

Manual updates (license issues, staging environments)

  1. Download the latest .zip from your PureThemes license page.
  2. Plugins → Add New → Upload Plugin → pick the new zip.
  3. WordPress will detect that an older version exists and prompt to replace it. Confirm.
  4. The license re-syncs on the next admin page load.

The migration screen

Major releases sometimes need to migrate data — new database tables, new schema for ticket types, etc. Booking Plus runs migrations on first load after the update and shows a migration progress screen if there’s significant work to do.

Do not close the page while a migration is running. On most sites it completes in seconds. On sites with thousands of bookings it can take a minute or two. If it’s interrupted, reload the page and the migration resumes from where it stopped.

What to back up first

Before any major plugin update on a production site:

  1. A full database backup (UpdraftPlus, the host’s snapshot tool, or a manual mysqldump).
  2. The plugin folder (wp-content/plugins/listeo-booking-plus/).

You’d want both anyway, but specifically for Booking Plus: it stores resources, occurrences and ticket data in custom DB tables, so a database backup is the only way to roll back cleanly.

Customizing Templates in a Child Theme

Booking Plus follows the same child-theme override convention as Listeo Core: copy any template from the plugin’s `/templates/` folder into a matching path under your child theme, and Booking Plus loads your copy instead of its own.

Override path

wp-content/plugins/listeo-booking-plus/templates/<path-to-template>.php
→
wp-content/themes/your-child-theme/listeo-booking-plus/<path-to-template>.php

Most commonly overridden templates

Template What it controls
booking/modal.php The popup shell and step navigation.
booking/modal-sidebar.php The left sidebar inside the popup.
booking/modal-step-datetime.php The first step — date / time pickers.
booking/modal-step-resource.php The resource picker step.
booking/modal-step-confirm.php The confirmation step — guest info, attendee fields, summary.
booking/modal-step-success.php The “booking confirmed” screen.
booking/event-ticket-selector.php The multi-tier ticket quantity selector on Event listings.
booking/event-booking-summary.php The breakdown of selected tickets and totals.
single-listing/resources.php The Resources block on single-listing pages.
single-listing/resource-card.php A single resource card inside that block.
resource-submit.php / resource-list.php The front-end resource manager screens.
single/recurring-event-block.php The occurrence picker on a recurring event’s single page.

Things to know before you override

  • Templates can change between major versions. When you override, you’re taking responsibility for keeping your copy current. After a major update, diff your override against the new plugin version and pull in any changes — otherwise you’ll miss bug fixes and feature improvements.
  • Hooks first, overrides second. Many templates have do_action() / apply_filters() hooks. If you can achieve what you want by hooking into them from your child theme’s functions.php, do that — you’ll survive plugin updates without diffing anything.
  • Don’t override partials/ unless you know what depends on them. Several partials are included from multiple parent templates; overriding one partial changes its behaviour everywhere it’s used.

Resources – Employees, Rooms & Equipment

A Resource is anything that can only be booked by one customer at a time that can belong to a listing. Examples:

  • A hair stylist (a Service listing has multiple stylists; the customer picks one).
  • A specific hotel room.
  • An individual rental car or kayak inside a vehicle rental business.

When a listing has resources attached, Booking Plus reserves the resource – not just the listing. Two customers can book the same listing at the same time if they pick different resources, and conflicts are checked at the resource level.

When Manager Resources page is set, each Listings in My Listings page will have button “Add Resource”, that will open a submit form to create resources for listings.

In Listeo Booking Plus, “Resources” is the catch-all term for whatever bookable thing lives inside a listing — a room in a hotel, a stylist in a salon, a vehicle in a fleet, a court in a tennis club. Because that term doesn’t fit every business equally well, the plugin lets you rename it at three different levels: globally, per listing type, or per individual listing

When Listeo Booking Plus needs to print the label on a button, a heading, or in an email, it looks for the most specific override first and walks up to the default:

  1. Per-listing override (most specific) — set on the single listing.
  2. Per-listing-type label — set on the Listing Type in the Listeo editor.
  3. Plugin default — the literal words Resource / Resources.

If a listing has its own label, that wins. If it doesn’t, the listing’s type label wins. If neither is set, the generic default is used.

Level 1 — Plugin default

Out of the box, every label says Resource (singular) / Resources (plural). If your site is generic enough, you can leave it. Most sites won’t want to.

Level 2 — Per listing type (recommended starting point)

This is where 90% of sites should set the label. It applies to every listing of a given type — so all your Hotels say “Rooms,” all your Salons say “Professionals,” all your Tour businesses say “Guides.”

Where to set it:

  1. Go to Listeo Editor → Listing Types in wp-admin.
  2. Edit the listing type (e.g. Hotel, Service, Rental).
  3. Scroll to the Booking Resource Labels block.
  4. Fill in:
    • Singular Label — e.g. Room, Professional, Instructor, Vehicle.
    • Plural Label — e.g. Rooms, Professionals, Instructors, Vehicles.
  5. Save.

Level 3 — Per individual listing

Sometimes one specific listing inside a type needs a different word. A clinic listing type called “Practitioners” might still have one location that uses “Therapists.” A hotel called “Rooms” might have one boutique property where they’re called “Suites.”

There are two ways for that override to get set, depending on whether the listing is being managed in wp-admin or on the front-end.

A) The admin metabox (always available)

On the wp-admin listing edit screen, there’s a Resource Label Override section with two fields — singular and plural. Fill them, save, and they take precedence over the listing type’s label for this one listing only. Leave them blank to fall back to the listing-type label.

This works for every listing on every site without any extra setup.

[SCREENSHOT: Resource Label Override metabox on listing edit screen]

B) Front-end submit form (opt-in per listing type)

If you want the listing owner to be able to set the override themselves from the front-end (without giving them wp-admin access), you need to add the override fields to the submit form for that listing type using Listeo’s Submit Listing Editor.

  1. Go to Listeo → Submit Listing Editor
  2. Pick the listing type you want to enable the override on.
  3. Choose the section where you want the fields to appear (e.g. Basic information or a new section called Booking).
  4. Click Add Field and you’ll see two Booking Plus entries in the picker:
    • Resource Label (singular) — Booking Plus
    • Resource Label (plural) — Booking Plus
  5. Add both. Save the form.

From that point on, the listing’s owner sees the two fields in their submit / edit form and can fill them in. The values save to the listing as post meta and the booking UI picks them up immediately.

Creating a Resource from Admin side

Resources are a custom post type registered under your Listings menu in the WP admin.

  1. Go to Listings → Booking Resources → Add New.
  2. Give the resource a title (e.g. “Anna — Senior Stylist”, “Room 4”, “Kayak #12”).
  3. Add a description and a featured image — both appear on the front-end and in the booking popup.
  4. Save.

Assigning a Resource to a Listing

Edit a listing (Services, Rentals, Events all support it) and you’ll find a Resources section. Pick the resources that belong to this listing and save, or you can edit resource and select the listing to which it should be assigned

Display layout on the front-end

Resources appear on the single-listing page in either List (full-width stacked) or Grid (2-column cards) layout — switch in Listeo → Settings → Booking → Resources display layout.

When the listing has resources, listing-level booking settings act as defaults

Some configuration (availability calendar, certain pricing options) moves from the listing to the resource when resources are attached. The listing-level fields stay as defaults that new resources inherit, and the editor shows a notice telling you so — no need to re-enter everything for each resource. Basically if something is not set for resource, it inherits the setting from the listing.