1.0.10
- 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.
- 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).
- Date-range calendar now greys out rental dates imported from iCal feeds (previously skipped for the date-range type; checkout/turnover day stays bookable).
1.0.9
- 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.
- Events, recurring event on classic widget, widget expiration, and showing date if listing is in the past.
1.0.8
- 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.
- 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.
- 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.
- 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.
1.0.7
- 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.
- 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.
- 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.
1.0.6
- 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.
- 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.
- Listing types with booking type "None" no longer show booking sections/meta in the resource form or resource list.
- Fixed resource thumbnail mismatch between the listing resource cards and the booking popup (featured image used first).
1.0.5
- 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).
- 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
- Various fixes
1.0.3
- 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
- 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
- First update release, thanks for choosing Listeo Booking Plus!









