Author Archive

Paddle Setup

Connect Paddle as your recurring payment provider, register a webhook, and link your packages to Paddle prices.

Stripe Setup

Connect Stripe to start charging recurring subscriptions, by adding your API keys and a webhook so the plugin knows when a payment succeeds.

Stripe vs Merchant of Record

Before you pick a payment provider, it helps to understand one big idea: who is the legal seller of your subscriptions. That single choice changes who handles taxes, where your money lands, and what you set up.

Customer Experience

Here is exactly what your customers see when they buy a recurring package, how they manage or cancel it later, and the few settings you control behind the scenes.

Getting Started

Welcome! This guide gets Listeo Subscriptions installed and shows you how it fits into your site, so you can start selling auto-renewing listing packages.

Listeo Booking Plus Changelog

10/09/2026

1.0.18

New
  • Minimum advance notice can now be entered in minutes, hours or days on the global Booking Rules setting, per-listing Booking Options metabox, and frontend submit form.
  • A new Minimum advance notice unit option pairs with the existing value.
  • The per-listing Minimum advance notice field is now a predefined field you can add in Listeo Editor wherever needed.
Improved
  • The per-listing Minimum advance notice field placeholder now shows the resolved site default instead of a blank box.
Updated
  • Minimum advance notice is now enforced for events and ticket-type listings, including booking popups, classic widgets, and date pickers.
  • When no bookable date remains because of minimum advance notice, the booking widget and popup now show a bookings closed message.
  • The booking popup now respects Core's Prevent overlapping bookings option for hourly time-picker listings.
  • Multi-tier ticket events now include the listing's Mandatory Fees in the booked price.
  • With no minimum advance notice configured, the popup now refuses past start times.
Fixes
  • Percent-based fees are now computed on the ticket subtotal, and the popup price breakdown now itemizes each fee alongside the ticket lines.
03/09/2026

1.0.17

New
  • Booking popup and team member profile popup now open with a zoom/fade animation
Updated
  • Booking popup price preview now includes the "add" commission, shown as a "Site fee" breakdown line, so guests see the same total the checkout charges (standard, event/ticket and resource bookings). The breakdown stored on the booking matches too.
Fixes
  • The popup open-during-close race fix ("Cannot read properties of null (reading 'inline')"), which also guards the theme's and Core's popups since they share the same Magnific singleton.
16/08/2026

1.0.16

New
  • New hook: lbp_resource_list_row_details - Lets devs inject custom per-resource content (e.g. internal notes) into each resource row server-side.
Fixes
  • Resource manager access fix - Any active team member can now open resource manager (role no longer blocks entry); per-resource permissions still gate what they can actually touch.
  • Duration + resource time slots bug - Fixes bug when listings slots configuration was used over the resource config
  • Weekday timezone bug - Slot weekday is now computed server-side instead of browser-side, fixing wrong-day slot selection for visitors west of UTC.
  • Race condition on quick date/team switches - Stale slot responses are now discarded so they can't overwrite newer ones.
  • Date format bug - Compact dates across the booking widget/popup now respect the site's actual date order (day-first sites no longer get month-first dates); new lbp_short_date_format filter for overrides.
09/08/2026

1.0.15

Fixes
  • capacity issues on recurring events
03/08/2026

1.0.14

Fixes
  • resource popup fixed on mobile; booking dates no longer drift to 2029–2030; per-resource minimum days enforced.
  • Booking Plus admin resource editor now matches the frontend.
New
  • Booking Plus ticket types and recurring schedule can be used as multi-step form sections
18/07/2026

1.0.13

Fixes
  • Availability Calendar on the resource form saves reliably (was broken/collapsed, toggle didn't persist).
  • "Import slots from main listing" now persists.
  • Popup bookings now save custom booking fields (requires companion Core update).
  • Multi-step submit form: Ticket Types & Recurring Schedule now assignable to a step (requires companion Core + Forms & Fields Editor).
  • Kept the existing mobile sticky "Book Now" fix.
Improved
  • Styling improvements
  • Tems support
01/07/2026

1.0.12

New
  • "Lock end time to services duration" option (hourly listings): End picker is locked to the sum of selected extra-services' durations, in widget + popup.
  • Per-service duration badge + duration-adjusted display price in the service picker (correct on initial load and on resource switch).
Improved
  • Recurring events no longer generate zero occurrences on non-US date sites (event dates parsed with the site date format instead of raw strtotime).
  • Popup now saves Booking Fields Builder custom fields (parity with the widget).
  • Popup now stores the itemized price breakdown (parity with the widget).
  • "Import slots from main listing" enables the Time Slots section toggle before populating, so imported slots aren't dropped on save.
  • Recurring-event occurrence list has dark-mode styling.
Fixes
  • PHP 8 fatal when submitting a popup booking with a wp-editor custom field (static call to an instance method in persist_custom_booking_fields).
  • Coupon min/max-spend message no longer shows raw HTML in the event modal.
  • Admin Listings page no longer white-screens when WooCommerce is deactivated (WC() guarded + clear notice).
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.

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.