Author Archive

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.

Plugin Settings Overview

The Booking Plus options live on the Listeo > Settings > Booking tab, in two blocks near the bottom: Listeo Booking Plus Settings and Booking Popup Appearance. They live here rather than on a separate page because they extend Listeo Core’s booking behavior — keeping them together means one place to configure how bookings work site-wide.


Listeo Booking Plus Settings

Option What it does Default
Collect attendee names Adds a name field for each ticket on the booking confirmation form. Names appear on the individual e-tickets. Off
Collect attendee emails Adds an email field for each ticket on the confirmation form. Useful when each attendee should receive their own ticket. Off
Reservation hold time (minutes) How long tickets stay reserved in inventory while a user is on the confirmation page. Prevents two customers from buying the last seat at the same time. Lower it on high-traffic events; raise it for slower checkout flows. 15
Generate individual ticket codes One scannable code (with QR) per ticket. When disabled, one code per booking — legacy behavior, fine for small private events. On
Recurrence lookahead (months) How far in the future to generate occurrences for recurring events. The cron job extends the window as time passes. 12
Enable service durations Shows a "Duration" field on each bookable service. When set, the booking widget reserves enough consecutive time slots to cover it (e.g. a 90-min service blocks three 30-min slots). Off
Enable Individual Services Shows an "Individual service" toggle on each service. Customers can pick at most one Individual service per booking; non-Individual services act as add-ons that stack freely. Off
Resources display layout How resources appear on a single-listing page. List = stacked full-width rows. Grid = 2-column card grid, similar to the listings archive. List

Booking Popup Appearance

Option What it does Default
Popup sidebar — color Primary background of the popup’s left sidebar. #2d2d32
Popup sidebar — gradient end (optional) When set, the sidebar becomes a top-to-bottom gradient from the primary color to this one. Leave blank for a solid sidebar. (empty)
Popup accent color Drives the dot accent before section labels, the active step number, the primary "Next" button and selection highlights. #3b82f6
Example gradient

Note Changes apply on the next page load — the values are emitted as CSS custom properties before the popup paints, so there’s no flash of the old color.

Installation & License Activation

Up and running in 5 minutes!
Install Listeo Booking Plus like any WordPress plugin, activate your license key, and the advanced booking features unlock instantly – with automatic updates included.

⚠️ Requirements: Booking Plus requires the Listeo Core plugin to be installed and activated first – the plugin won’t boot without it. WooCommerce is also needed for bookings and checkout to work.


Installation
  1. Go to https://purethemes.net/license/ and download listeo-booking-plus.zip
    Enter your Listeo theme license there (for the free version) or your Listeo Booking Plus license (if you purchased the Pro version).
    You’ll need purchase key: How to find my license key?
  2. In WordPress admin, go to Plugins → Add New → Upload Plugin.
  3. Pick the zip, install, then click Activate.

If Listeo Core is missing or not active, you’ll see this notice – install/activate Listeo Core first, then come back:

Listeo Booking Plus – This plugin requires Listeo Core to be installed and activated. Please install Listeo Core first.


Enter your license key

Lost key or did not receive it after purchase? Send us an email at [email protected]

The free tier (the redesigned booking popup) works right after activation. All premium features – Resources, Event Ticketing and Recurring Events – stay locked until a valid license key is activated.

  1. Go to Settings → Booking Plus License.
  2. Paste your license key from your PureThemes account.
  3. Click Activate License.


You’ll see a green confirmation and a “Last verified” timestamp on success.

🔧 Activation failed? The most common reasons are:

1️⃣ The key has been used on too many sites – deactivate it on one of the others first.

2️⃣ The site URL doesn’t match what the license is registered against – typical after a domain change or moving from staging to production.

3️⃣ The server can’t reach the PureThemes license endpoint – check that your host isn’t blocking outbound HTTPS connections.


Invalid or expired license

With an invalid or expired license you’ll see a persistent admin notice on every page that links to the License page, and Booking Plus’s premium features remain disabled until activation succeeds.
Your data is not deleted – resources, tickets and bookings stay in the database; they just stop being surfaced until the plugin can boot again.


Automatic updates

Once activated, the license also enables automatic updates through the standard WordPress Dashboard → Updates and Plugins screens – no manual zip downloads needed for future versions.
See also: Updating the Listeo Booking Plus →


FAQ
  • Is there a free version of Booking Plus?

  • Where do I find my license key?

  • I'm moving from staging to production - what about the license?

  • What happens to my data if the license expires?

  • Do I get automatic updates?


Viewport Search

How it works?

If someone types a location in the search field, the geocoding service (Google Places API or OpenStreetMap Nominatim) returns not only the center coordinates but also a viewport – a rectangular bounding box that naturally represents the entire searched area.

When viewport search is enabled, Listeo uses these bounding box coordinates to find all listings within that rectangular area. For example:

  • Searching “California” returns all listings in the entire state
  • Searching “Brazil” returns all listings across the country
  • Searching “Europe” returns all listings on the continent

This works perfectly for large geographic areas where a circular radius search would be impractical.

Benefits:

  1. No radius selection needed for large areas – the natural bounds from the geocoding service are used automatically
  2. Faster database queries – simple coordinate range comparison instead of complex trigonometric calculations
  3. Better user experience – searching “Brazil” returns results from the entire country, not just a 50km radius from the center point
  4. Works with both Google Maps and OpenStreetMap – viewport data is included in both APIs at no extra cost


How to enable?

Viewport search uses the same geocoding API you’re already using for location search – there are no additional API costs. The viewport/bounding box data is already included in every geocoding response.

  1. Navigate to Listeo Core → Settings → Maps in your WordPress admin panel
  2. Find the “Location Search Method” setting
  3. Choose one of three modes:
    – Radius-based (current) – Traditional circular search using selected radius (default)
    – Viewport-based (recommended for large areas) – Uses rectangular bounding box from geocoding service
    – Auto (intelligent switching) – Automatically uses viewport for large areas (countries/regions) and radius for cities
  4. Configure optional settings:
    – Viewport Fallback Radius – When viewport data is unavailable (rare), use this radius value (default: 50)
    – Auto Mode Area Threshold – In Auto mode, if the viewport area exceeds this value in km², use viewport search (default: 50,000 km²)


Technical Details

Performance Comparison
Metric Radius Search Viewport Search
Database Query Haversine formula (trigonometry) Simple BETWEEN comparison
Query Speed (10k listings) 2-3 seconds 0.3-0.5 seconds
Indexable ❌ No ✅ Yes
Large Area Support ❌ Poor ✅ Excellent

API Costs

No additional costs – Viewport search uses the same geocoding API calls as radius search:

  • Google Places API: Same autocomplete session ($0.00283 per search)
  • OpenStreetMap Nominatim: FREE (no change)

The viewport/bounding box data is already included in every geocoding response – we’re just using data that was previously ignored.


When to Use Each Mode?

Use Viewport Mode:

  • Sites with listings across large geographic areas (states, countries, continents)
  • High-traffic sites with many listings (10,000+)
  • When users commonly search for broad locations
  • To eliminate the radius slider from search forms

Use Radius Mode:

  • Sites focused on local/neighborhood search
  • “Near me” functionality is important
  • Users expect circular search areas
  • Listings are concentrated in specific cities

What is Listeo Booking Plus

Take bookings beyond the basics!
Listeo Booking Plus adds bookable resources, event ticketing with QR codes, recurring events and a redesigned booking popup on top of Listeo Core.

Listeo Booking Plus is an add-on plugin for the Listeo theme. It extends the booking functionality that already ships with Listeo Core rather than replacing it – Core still handles the listings, the base booking flow and payments. Booking Plus adds the pieces that high-traffic Service, Rental and Event sites tend to outgrow Core for.

✅ The four pillars of Booking Plus:
1. Resources – bookable “things” attached to a listing: a stylist, a treatment room, a rental car, a kayak. Each resource has its own availability and its own 2-way iCal sync. The booking widget reserves the resource, not just the listing. Resources →
2. Event Ticketing – multi-tier ticket types per event (Adult / Child / VIP), per-type capacity, attendee details, per-ticket QR codes for check-in, and a reservation hold (15 minutes by default) that prevents overselling. Event Listings & Ticket Types →
3. Recurring Events – define a recurrence rule once and Booking Plus generates occurrences for the next 12 months (adjustable). Per-occurrence overrides let you change price or capacity, or cancel a single date without touching the rule. Recurring Events →
4. Booking Popup – a multi-step modal (Resource → Date & Time → Confirm → Success) used by Services, Rentals and Events. Sidebar color, optional gradient and accent color are themable from the plugin settings. The Booking Popup →

❌ What Booking Plus does not do:

• It does not replace Listeo Core booking – Core still runs the underlying booking record, status flow and payments. Booking Plus layers on top, so your existing bookings keep working.

• It does not add payment gateways – payments go through whatever you’ve already configured in Listeo Core / WooCommerce. Setting up Payment Gateways →

• It does not introduce new listing types – it enhances the existing Service, Rental and Event types.


Where to go next?
  1. Install and activate the plugin: Installation & License Activation →
  2. Get familiar with the settings: Plugin Settings Overview →
  3. Set up your first bookable resources: Resources – Employees, Rooms & Equipment →

FAQ
  • Do I need Listeo Booking Plus to accept bookings?

  • Will my existing bookings still work after activating Booking Plus?

  • What exactly is a 'Resource'?

  • How does Booking Plus prevent overselling event tickets?

  • Which payment gateways does Booking Plus support?

  • Can I change how the booking popup looks?


Save Search Feature

Save your search criteria and get daily email alerts when new matching listings are published. Email Alerts are sent once daily via cron when new listings match user search criteria

Allow users to set up custom alerts or notifications for new listings based on their personal preferences!


How to Enable?

1. Enable Feature
Listeo Core → Browse/Search Options → Saved Search Alerts section
– Enable Saved Search Alerts Feature – Turn on/off
– Maximum saved searches per user – Default: 10

2. Create Dashboard Page
Create a page with shortcode [listeo_saved_searches] and assign it in Listeo Core → Settings → Pages:

3. Email Template
Listeo Core → Settings → Emails (Saved Search Alerts section):
– Email subject  – Default: “New listings matching your saved searches!”
– Email content – Customize the message body


How to Save a Search

1. Perform a search using any filters (keywords, location, category, price, etc.)
2. Click the Save Search button (bell icon) near the search form
3. Enter a name for your search and click Save

Note: You must be logged in to use this feature.


Managing Saved Searches

Go to Dashboard → Saved Searches to:

– Run Search– Click the search name or search icon to view results
– Toggle Alerts – Click the bell icon to enable/disable email notifications
– Delete – Remove searches you no longer need
– Maximum 10 saved searches per account

 

 

How to create Mistral AI API key?

Mistral AI is a French artificial intelligence company headquartered in Paris and operates under EU jurisdiction with GDPR applicability by default.

Creating MistralAI API Key

  1. Create MistralAI Account

    Go to https://console.mistral.ai/ and register an account

    After signing up, navigate to API Keys https://console.mistral.ai/home?workspace_dialog=apiKeys
    – Click the “Create new secret key” button.
    – This begins the setup process for your API key.

  2. Generate Your API Key

    In the “Create new key” dialog:
    – Enter a name for your key (e.g., demo API key) to identify it later.
    – Choose the project (default is fine unless you have multiple projects).
    – Click “Create new key”

    Your new key will be shown only once — copy it immediately.

    That’s it!


Free Tier Limits

Free tier has only 1 request per second which is quite low and you might want to upgrade to “Scale” plan which is similar to Open AI and you top up credits (min 10 EUR). To do this go to Admin Settings → AI Studio https://admin.mistral.ai/subscriptions?subscription-tab=ai-studio and click Upgrade

Listeo Third-Party Plugin Development Policy

Guidelines for Third-Party Developers

1. Introduction

 This policy establishes guidelines for third-party developers who create plugins, extensions, or add-ons that integrate with or extend Listeo functionality.

These guidelines aim to:

  • Help users distinguish between official Listeo products and third-party extensions
  • Protect the Listeo brand and ensure quality standards
  • Provide clear naming conventions for the developer community
  • Prevent user confusion about product origins and support responsibilities

2. Trademark and Naming Guidelines

2.1 Core Principle

Your plugin name must not begin with “Listeo” or any variation thereof. The Listeo name should only be used to indicate compatibility, not as a primary identifier.

2.2 Naming Format

Use your distinctive product name followed by “for Listeo” or “compatible with Listeo.”

Naming Examples

❌ NOT Allowed

✓ Allowed

Listeo Booking Calendar

Booking Calendar for Listeo

Listeo Reviews Manager

Reviews Manager for Listeo

Listeo SMS Notifications

SMS Notifications for Listeo

ListeoPayments

Payment Gateway for Listeo

Listeo Pro Extensions

Pro Extensions compatible with Listeo

2.3 Prohibited Uses

The following uses of the Listeo trademark are strictly prohibited:

  1. Starting your plugin name with “Listeo” – This implies official affiliation
  2. Using “Listeo” in your domain name – e.g., listeo-plugins.com, listeoaddons.com
  3. Creating portmanteau names – e.g., ListeoX, ListeoPro, ListeoPlus, MyListeo
  4. Using the Listeo logo in your product branding or marketing materials
  5. Implying official endorsement or partnership without written agreement
  6. Using variations or misspellings – e.g., Listio, List-eo, L1steo

2.4 Permitted Uses

You may use the Listeo trademark in the following ways:

  • To accurately describe your product’s compatibility: “X for Listeo” or “X compatible with Listeo”
  • In product descriptions and documentation to explain functionality
  • In tags and keywords for marketplace listings (e.g., ThemeForest, CodeCanyon)
  • On your website to truthfully describe Listeo integration or support services

3. Plugin Slug Guidelines

The same naming rules apply to your plugin’s technical slug (folder name and text domain):

  • Incorrect: listeo-booking-calendar, listeo_reviews
  • Correct: booking-calendar-for-listeo, reviews-manager-listeo

4. Technical Requirements

Third-party plugins should follow these technical best practices:

  • Dependency Check: Verify Listeo theme is active before initializing your plugin
  • Version Compatibility: Clearly state which Listeo versions your plugin supports
  • Hooks and Filters: Use Listeo’s documented action hooks and filters rather than modifying core files
  • Coding Standards: Follow WordPress Coding Standards and best practices
  • Unique Prefixes: Use your own unique prefix for functions, classes, and database options

5. Support and Responsibility

Please note the following regarding support:

  1. PureThemes does not provide support for third-party plugins. Users should contact the plugin developer directly.
  2. Third-party developers are solely responsible for their plugin’s functionality, security, and compatibility.
  3. We may require disabling third-party plugins before providing support for Listeo-related issues.
  4. Third-party plugins should include clear documentation and support contact information.

6. Required Disclaimer

All third-party plugins must include a visible disclaimer in their documentation and/or plugin description stating:

“This plugin is developed and maintained by [Developer Name] and is not affiliated with, endorsed by, or officially connected to PureThemes or Listeo. For support, please contact [your support channel].”

7. Enforcement

PureThemes reserves the right to:

  • Request name changes for plugins that violate these guidelines
  • Report trademark violations to marketplace platforms (ThemeForest, CodeCanyon, WordPress.org)
  • Take legal action in cases of willful trademark infringement
  • Update these guidelines as needed with reasonable notice

8. Questions and Contact

If you have questions about these guidelines or need clarification on whether your intended use is permitted, please contact us at [email protected] before releasing your product.