Author Archive

Installation & License Activation

Install the plugin

  1. Download the listeo-booking-plus.zip archive from your PureThemes account.
  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

Booking Plus is gated by a license: all features stay dormant until a valid 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.

If activation fails, the most common reasons are:

  • The key has been used on too many sites — deactivate it on one of the others first.
  • The site URL doesn’t match what the license is registered against (typical after a domain change or moving from staging to production).
  • The server can’t reach the PureThemes license endpoint — check that your host isn’t blocking outbound HTTPS.

What happens with an invalid / expired license

You’ll see a persistent admin notice on every page that links to the License page, and Booking Plus’s 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.

Automatic updates

Once activated, the license also enables auto-updates through the standard WordPress Plugins → Updates screen.

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

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

  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 iCal sync. The booking widget reserves the resource, not just the listing.
  2. Event ticketing — Multi-tier ticket types per event (Adult / Child / VIP), per-type capacity, attendee details, per-ticket QR codes, and a short reservation hold to prevent overselling.
  3. Recurring events — Define a recurrence rule once and Booking Plus generates the occurrences for the next N months. Per-occurrence overrides let you change price, capacity, or cancel a single date without touching the rule.
  4. Booking popup — A multi-step modal (Date/Time → Resource → Confirm → Success) used by Services, Rentals and Events. Sidebar colors, gradient and accent are themable from the settings tab.

What Booking Plus does not do

  • It does not replace Listeo Core booking — Core still runs the underlying booking record, status flow and payment. Booking Plus layers on top.
  • It does not add payment gateways — payments go through whatever you’ve already configured in Listeo Core / WooCommerce.
  • It does not introduce new listing types — it enhances the existing ones.

Requirements

  • Listeo theme minimum version 2.040+ Listeo Core plugin installed and active (Booking Plus will refuse to boot without Core and show an admin notice).
  • WordPress 5.0+
  • PHP 8.2+
  • A valid Booking Plus license (entered on the License page).

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.

Customizing the Listing Description Editor

The Listing Description field uses TinyMCE editor on the front-end submission form. By default, it includes basic formatting options, but you can extend it with additional buttons and features using the submit_listing_form_wp_editor_args filter.

Adding Custom Buttons

Add this code to your child theme’s functions.php file:

add_filter( 'submit_listing_form_wp_editor_args', 'my_full_featured_editor' );
function my_full_featured_editor( $args ) {
    $args['tinymce']['plugins'] = 'lists,paste,tabfocus,wplink,wordpress,textcolor,colorpicker,hr,charmap,table,anchor,code';
    $args['tinymce']['toolbar1'] = 'formatselect,bold,italic,underline,strikethrough,|,forecolor,backcolor,|,bullist,numlist,|,link,unlink,|,undo,redo';
    $args['tinymce']['toolbar2'] = 'alignleft,aligncenter,alignright,|,outdent,indent,|,table,|,hr,charmap,|,removeformat,code';
    $args['media_buttons'] = true;
    return $args;
}

The plugins parameter loads required TinyMCE plugins, while toolbar1 and toolbar2 define which buttons appear in each row. Use | as a separator between button groups. Setting media_buttons to true enables the Add Media button for uploading images.

Available Buttons Reference

Text Formatting: bold, italic, underline, strikethrough, formatselect, styleselect, forecolor, backcolor, removeformat

Lists & Alignment: bullist, numlist, alignleft, aligncenter, alignright, alignjustify, outdent, indent

Insert Elements: link, unlink, hr, charmap, anchor, image, media

Advanced: table, code, subscript, superscript, cut, copy, paste, undo, redo

Zoom Integration for Listeo

Listeo allows listing owners to automatically generate Zoom meeting links for service-type bookings. When a booking is paid and confirmed, a Zoom link is created automatically and sent to the customer via email.

This guide covers the setup process for both site administrators and listing owners.

Part 1: Site Administrator Setup

Step 1: Create a Zoom App

Go to the Zoom App Marketplace and sign in with your Zoom account. Click Develop in the top-right corner, then Build App. In the popup, select General App (the default option).

Important: By default, your Zoom app will be unpublished (in development mode). In this state, only users who belong to the same Zoom account/workspace as the app creator can connect their Zoom account. This means if listing owners on your site have their own separate Zoom accounts, they won’t be able to authorize the app.                  

If listing owners need to connect their own Zoom accounts, you must publish your app on the Zoom Marketplace. This requires:

  •   A privacy policy URL
  •   App description and documentation
  •   Passing Zoom’s security review

If only you (the site admin) will be hosting all meetings, an unpublished app is sufficient just connect your own Zoom account in My Profile and all meetings will be created under your account.

Who hosts the meetings?

Each listing owner who wants automatic Zoom meetings must connect their own Zoom account. Meetings are created under the connected owner’s account — they become the host.

This means:

  • Single-owner site (you run all listings yourself): Just connect your Zoom account. No app publishing needed.
  • Multi-owner site (listing owners are different people with their own Zoom accounts): Your Zoom app must be published on the Zoom Marketplace so that external Zoom users can authorize it.
Step 2: Configure App Settings

On the app configuration page:

  1. You can switch between Development and Production mode as needed
  2. In the Select how the app is managed section, choose User-managed
  3. Copy the Client ID and Client Secret values shown below that section
Step 3: Connect to Listeo
  1. Go to Listeo Core → Zoom Integration in your WordPress admin
  2. Paste the Client ID into Zoom OAuth Client ID
  3. Paste the Client Secret into Zoom OAuth Client Secret
  4. After saving, the plugin will display a Callback URL
  5. Copy this callback URL and paste it into the OAuth Redirect URL field in your Zoom app settings

Step 4: Set Required Scopes

In your Zoom app, go to the Scopes section and add the following permissions:

  • meeting:write:meeting – Create meetings
  • meeting:read:meeting – Read meeting info
  • user:read:user – Get user info

Complete the remaining steps in the Zoom app wizard. The other settings are mostly optional; the configuration above is what’s required for the integration to work.

 

Step 5: Add the Zoom Field to Your Listing Form
  1. Go to Listeo Editor → Submit Listing Form
  2. Edit the form for your service listing type (or any listing type using single-day bookings)
  3. Add the field Enable Zoom meetings for bookings (checkbox type)

Step 6: Configure the Email Template
  1. Go to Listeo Core → Emails
  2. Find Zoom Meeting Invitation and enable it
  3. Customize the email content as needed

Available template tags:

Tag Description
{meeting_date} Formatted date and time of the meeting
{meeting_topic} Meeting subject/title
{zoom_meeting_id} Zoom meeting ID number
{zoom_password} Meeting password
{zoom_join_url} Direct join URL for participants
{zoom_start_url} Host URL to start the meeting

 

Step 7. Publishing your Zoom App (required for multi-owner sites)

1. In your Zoom app settings, fill out the App Information section (name, description, company name)
2. Add a Privacy Policy URL and Terms of Use URL (can be pages on your website)
3. Add a Support URL or email
4. Upload an app icon
5. Click Submit for Review
6. Zoom’s team will review your app (typically takes a few business days)
7. Once approved, any Zoom user will be able to authorize your app

For more details, see https://developers.zoom.us/docs/distribute/app-review-process/.

Part 2: Listing Owner Setup

Each listing owner who wants to use Zoom for their bookings must connect their own Zoom account:

  1. Go to My Profile page
  2. Click the button to connect to Zoom
  3. Authorize the app when prompted

Once connected, the owner can enable Zoom meetings on individual listings by checking the Enable Zoom meetings for bookings option.

How It Works

When a customer completes a paid booking for a Zoom-enabled listing:

  1. A Zoom meeting is automatically created using the listing owner’s connected Zoom account
  2. The customer receives the Zoom Meeting Invitation email with the meeting details
  3. Both parties can view meeting information on their respective booking pages (My Bookings for guests, Bookings for owners)

How to create a Gemini AI API key?

It literally takes 30 sec to create one 😉

How to Create Gemini API Key

  1. Go to https://aistudio.google.com/api-keys
  2. Click “Create API Key” button
  3. Select or create a Google Cloud project
  4. Copy your API key and paste in our plugin
Be aware that Gemini free tier has very low limits and you might hit requests per minute limit with just 2 questions (5 requests to AI per minute + training only 100 items per minute) We recommend upgrading to a paid plan. 

Upgrade to Paid Tier

  1. Go to https://aistudio.google.com/api-keys
  2. Find your project
  3. Click “Set up Billing” button
  4. Link a Google Cloud billing account
FREE TIER
Model RPM TPM RPD Input Price Output Price
Gemini 3Flash 5 250k 250 Free Free
Gemini 3 Pro 2 125k 50 Free Free
Gemini Embedding 100 30k 1,000 Free Free

To avoid hitting limits enable billing in Google settings.

PAID TIER (Tier 1)
Model RPM TPM RPD Input Price Output Price
Gemini 3 Flash 1,000 1M 10k $0.30/1M $2.50/1M
Gemini 3 Pro 150 2M 10k $1.25-2.50/1M* $10-15/1M*
Gemini Embedding 3,000 1M $0.15/1M

RPM = Requests Per Minute | TPM = Tokens Per Minute | RPD = Requests Per Day


Billing

Please monitor your billing. OpenAI is safer because you prepay credits. Gemini bills you after the cycle, so costs can spike if you miss it.

 

How to switch from classic cart/checkout to new block-based?

Level up your store with a seamless and customizable checkout for a cart-to-checkout experience that converts more shoppers.

Follow same process for cart and checkout pages.

  1. Find checkout (or cart) page, edit it.

    Then switch to WordPress editor

  2. Delete classic shortcode [woocommerce_checkout] or [woocommerce_cart]
  3. Add block element: Checkout
  4. And that’s it. You can customize checkout/cart here using WordPress blocks editor.