Author Archive

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.

AI Chat

PurioChat is our AI chatbot plugin that works with any theme but has dedicated module for Listeo allowing it to search deeply through listings.

Listeo brings AI assistant to your directory site, letting visitors find listings using natural conversation.

OpenAI
OpenAI
Gemini
Gemini
Claude
Claude
Mistral
Mistral
Grok
Grok
DeepSeek
DeepSeek
Llama
Llama

PurioChat combines semantic understanding with real-time database search making your directory easier to use and increasing visitor engagement. AI searches through listings and filters them by ✅location, ✅price, ✅rating and ✅booking availability. Supported AI Providers: ChatGPT, Gemini and Mistral AI


⚙️Installation

Plugin is automatically installed with Listeo. However if you can’t see it or have older theme version you can download it manually:

  1. Go to https://purethemes.net/license/ and download  PurioChat plugin
    You’ll need purchase key: How to find my license key?
  2. Install and activate ai-chat-search.zip in WP Dashboard → Plugin → Add New 

Configuration

  1. Navigate to PurioChat in your WordPress sidebar.
    Add your Open AI api or Gemini key and configure plugin to your needs.
    How to create Open AI API key? →
    How to create Gemini API key? →

  2. Then go to Data Training tab and click “🚀 Start Training“.

    For the listing search feature, only “Listings” data is required. Other post types are available in the Pro version and can be used by the chatbot.


    If you don’t want the chatbot to search your site content
    , skip data training and uncheck “Listings.” It will then respond only using your Custom System Prompt (see FAQ).

Features

Feature Free Pro
Search through listings ✅ ✅
Search analytics ✅ ✅
Gemini and ChatGPT ✅ ✅
Custom Instructions for AI
(based on system prompt)
✅ ✅
Chat history ❌ ✅ Access to chat stats & conversation history
Chat Insights ❌ ✅ AI analyzes conversations and highlights summaries, gaps, weaknesses, and sentiment
Posts & pages search ❌ ✅ AI can search through content from posts and pages
PDF Files as Training Source ❌ ✅ Upload PDF files and train chatbot on them
WooCommerce products ❌ ✅ Search products
✅ Filter by price, stock, sale, rating / Check order status
Custom post types ❌ ✅ Search through custom post types
Customizable Design ✅ ✅ Minimal bar, image, or animated silk wave effect. Dark and light mode.
Quick Action Buttons ❌ ✅ Buttons with link, predefined question, or contact form popup
AI Lead Capture ❌ ✅ Collect visitor data like email or phone and get notified
Image and Voice Messages ❌ ✅ Visitors can attach images or record voice messages
Telegram & WhatsApp ❌ ✅ Let users chat with your AI assistant via Telegram or WhatsApp
n8n, Zapier & Make ❌ ✅ Connect with external apps via webhooks
Remove “Powered by” Label ❌ ✅

Pricing: https://purethemes.net/ai-chat-search-pro/


FAQ

  • 🤖 Improving chatbot replies with a Custom System Prompt

    You can add there specific instructions about your website’s focus, target audience, or special features to help the AI provide more relevant and personalized answers to your visitors.

    Example:

    IMPORTANT:
    – This is a city-wide business directory for Austin, Texas, featuring restaurants, hotels, services, and entertainment venues. We help locals and tourists discover the best spots in town.
    – If users ask how to add their business, explain that they need to click “Add Listing” in the top menu, create a free account, and fill out the listing form with their business details, photos, and contact information.
    – Paid packages offer featured placement and priority in search results.CONTACT INFO:
    – If someone asks you about how to contact us provide him [email protected] and phone +1 123 345 789
    – Our business opening hours are 9am-15pm Monday to Friday

    Another example – if your website is multilingual but listing location/names are in english language you can tell him to always translate user query before searching

    CRITICAL:
    If the user query is in another language, translate it to English before searching.
    For example: French: ‘trouve un restaurant à New York’ → translate to ‘find a restaurant in New York’

     To improve the AI chatbot’s replies to generic questions like “recommend something in New York” you need to give him an idea what your website is about

    IMPORTANT:
    This is a directory for discovering places in New York City. We help users find the best spots in the city. When asked generic questions like “what you recommend” or “what to do in NY” search for restaurants, attractions or shops or services listings from our directory.”

    In general, prompting is an art – the quality of an AIs answer depends on the prompt or instructions. Sometimes too many examples can confuse the model, but too few can also lead to poor results.

    If a user asks for “good Italian restaurant” or “good headphones,” the AI may auto-apply a rating filter (e.g. 4.5+). If items have no ratings, it may return no results. That’s why you need to tweak prompt on your own and e.g. add: “Don’t apply a rating filter unless the user asks for it.”

  • 🔍 How to fix chatbot giving irrelevant responses despite having indexed content?

    This is usually a custom instructions (system prompt) issue. The AI needs clear guidance on when to search your site content and which tool use (for listings, products or general site content).

    Add decision logic to clarify your content types. Universal decision logic is already added in built-in system prompt but you might want to extend it with samples from your website content.

    DECISION LOGIC:
    - Question about listings such as [examples] → use search_listings()
    - Generic products such as [examples] → use search_products()
    - Generic questions about website content such → use search_universal_content()

    Use GPT-5.4  instead of GPT-X-mini for better quality if you have long custom instructions. Small prompt changes can significantly impact behavior.

  • 🔍 How AI searches through site content?

  • 💰 How much does it cost in OpenAI API fees?

  • 🎯 Why search results are decent but not perfect?

  • 📄 Can I add PDF files to training data?

  • ✅ Is this right fit for my website?


Elementor Widget and Shortcode

Chatbot can be used also via shortcode [ai-chat] or Elementor Widget AI Chat (elementor widget has 2 visual settings including the one below). You can download pre-made elementor section from our demo here (upload to elementor templates).

Point of Interests

The Listeo POI plugin displays nearby points of interest (restaurants, transport, healthcare, shopping, etc.) on listing pages using Google Places API, helping visitors discover amenities around each property.

It features configurable categories with customizable search radius and result limits, intelligent caching to minimize API costs, and flexible display options for seamless integration with your listings

Points of interest can be displayed as a tabs

or toggle accordions


Installation

  1. Make sure you set your language in Dashboard → Settings → General
  2. Go to https://purethemes.net/license/ and download Listeo Points of Interest plugin
    You’ll need purchase key: How to find my license key?
  3. Upload listeo-po.zip in WP Dashboard → Plugin → Add New 

Configuration

Navigate to Listeo POI in your WordPress sidebar,. Add Google API key and configure settings to your needs

The plugin caches Google Places API responses in the database for 180 days (configurable) to minimize API costs and improve performance. Cached POI data is served on repeat visits instead of making new API calls, with options to clear or refresh cache through the admin panel.


API Rate Limit

Although the plugin itself has a “Max API Requests (24h)” setting, it’s always wise to configure quota limits directly in Google Cloud.

https://developers.google.com/maps/billing-and-pricing/manage-costs#set-caps
✅ SELECT the API in the drop-down menu (All Google Maps Platform APIs).
✅ SET requests/map loads/elements per day parameter according to what you are willing to pay each month.
✅ Click SAVE and repeat this process for any API you want to use.

Please set these limits to stay charge-free:
✅ Geocoding API → 320 requests per day
✅ Maps JavaScript API → 320 map loads per day
✅ Places API → 50 requests per day

AI Smart Search

AI Search feature in PurioChat is dedicated for Listeo and brings natural language search to your directory website with OpenAI OpenAI or Gemini Gemini or Mistral AI. Users can search using everyday phrases instead of just keywords.

Try it yourself on our demo: https://listeo.pro/

Key Benefits:
✅ Natural Language: Users can search like they talk: cozy restaurant with outdoor seating.
✅ AI understands context and finds businesses that meet user needs.
✅ Analytics Insights: Track popular searches to understand your users better.
What Users Search For Standard WordPress Search Listeo AI Search
romantic dinner spot
❌ No — “romantic” rarely appears in restaurant listings ✅ Finds fine dining, intimate cafes, date-night restaurants
dog grooming services
Pet care needs
⚠️ Maybe — only if exact words “dog grooming” appear ✅ Finds pet salons, mobile groomers, veterinary services
kids birthday party venue
❌ No — exact phrase not in venue descriptions ✅ Shows party halls, entertainment centers, kid-friendly venues

The plugin creates a vector database by turning each listing into an embedding — a unique numerical representation capturing its meaning. User queries get converted the same way, then matched mathematically to find the closest results.


⚙️ Installation

Plugin is automatically installed with Listeo. However, if you can’t see it or have an older theme version, you can download it manually:

  1. Go to https://purethemes.net/license/ and download the PurioChat plugin.
    You’ll need your purchase key:
    How to find my license key?
  2. Install and activate ai-chat-search.zip in WP Dashboard → Plugins → Add New

Configuration

  1. Navigate to PurioChat in your WordPress sidebar, then go to the AI Search tab. Add your OpenAI, Gemini, or Mistral AI API key and configure the plugin to your needs.How to create OpenAI API key? →
    How to create Gemini API key? →
    How to create Mistral API key? →
  2. Then go to the Data Training tab and click 🚀 Start Training.

    For the listing search feature, you only need Listings as training data. Other post types that are locked are available in the Pro version and can be used by the chatbot feature.


    Data Training tab in PurioChat
  3. Once the database is ready, go to Listeo Editor → Search Forms and add the AI Field to your search forms.
    Adding AI Field to Listeo search form
  4. And that’s it. AI Quick Picks allows visitors to quickly get the best 3 matching listings. This is optional.
    AI Quick Picks setting in Listeo
  5. The Statistics tab provides comprehensive analytics and insights. Chat history is available in the Pro version if you use the AI chatbot.
    PurioChat statistics tab
  6. It is recommended to set Best Match as the default sorting method. With this setting, listings with the highest match score will appear first.
    Listeo Core → Browse/Search Options → By default sort listings by
    Best Match sorting option in Listeo

FAQ

  • I see not enough or no search results at all

  • Why are search results decent but not perfect?

  • What does 'Minimum Match Percentage' control?

  • Should I enable 'Query Expansion'?

  • What data is processed by OpenAI/Gemini/Mistral in AI Search?


Unlimited Listing Types

Create unlimited listing types beyond the built-in Service, Rental, Event, Classifieds.

Where to Find It: WordPress Admin → Listeo Editor → Listing Types 
✅ Visual editor: Drag-and-drop interface with conflict detection
✅ Auto-integration: Works with Forms & Fields Editor, Elementor widgets, and Custom Permalinks
✅Specialized add listing forms: Each listing type submit form can be individually modified in Listeo Editor
✅Custom booking: Different booking methods per business type

P.S. You can change order of listing types by dragging and dropping them.

🏷️ Basic Information
– Name: Display name (e.g., “Restaurant”) Required
– Plural Name: Plural form (e.g., “Restaurants”) Required
– Slug: URL-friendly identifier (auto-generated, unique) Required
– Description: Optional text description
– Icon: Upload icon/image from media library (supports SVG)

📅 Booking Configuration
– Booking Type: Choose preset (None, Single Day, Date Range, Event Tickets)
– Booking Features: Mix-and-match checkboxes:
– Time Slots Selection
– Date Range Selection
– Start/End Time Picker
– Ticket System
– Add-on Services
– Availability Calendar

⚙️ Business Settings
– Enable business hours: Toggle for opening/closing hours display
– Register dedicated taxonomy: Auto-create category taxonomy (e.g., “restaurant_category”) – when checked  listing type  will be displayed in categories page and you will be able to add listing-type specific categories.

👁️ Display Settings
– Active: Make available for new listings (inactive types hidden from submission)

This is how you can hide default listing types – simply uncheck “active” state and they won’t be displayed in submit listing form.

One added you will see new listing type available during listing submission, in this example – “Test”.


Categories for listing types

Categories and Sub Categories

 

Listeo Health Check

Click Listeo Dashboard and scroll down – you will find there Listeo Health insights. The Listeo Site Health (click Listeo Health in admin toolbar) page provides a diagnostic dashboard for monitoring your WordPress site’s technical status and resolving issues quickly.

Quick Stats & Plugin Versions

Shows version information for PHP, WordPress, and Listeo theme with color-coded status indicators (green = good, yellow = warning, red = critical).

Monitors essential Listeo plugins and flags version mismatches. Keep all plugins updated to maintain compatibility.


Memory Usage

Tracks server resource consumption including WordPress memory, PHP memory, execution time, and upload limits. Visual bars show usage percentages.
Common issues with too low memory limit:

  • Fatal error: Allowed memory size exhausted – The classic white screen with memory error message
  • Plugin activation failures – Plugins won’t activate or suddenly deactivate themselves
  • Admin dashboard won’t load – Blank pages or incomplete loading in wp-admin area
  • Media upload failures – Can’t upload images or files, especially larger ones
  • White screen of death – Completely blank pages on frontend or backend
  • Elementor not loading and asking for safe mode


WordPress Heartbeat API

WordPress Heartbeat API runs frequent admin-ajax.php requests that can cause server overload and high CPU usage. The API performs tasks on a “tick” interval utilizing admin-ajax.php across the dashboard, post editor, and frontend areas.


Debug & Error Management

Controls debugging features and displays recent error logs. Quick action buttons:

  • Enable Full Debug Mode – For troubleshooting
  • Turn Off All Debug – For production sites
  • Log Errors Only – Records errors without public display
  • Hide Frontend Errors – Prevents visitor-facing error messages


Email Configuration

Monitors email delivery method and provides testing tools. PHP Mail method is unreliable – install an SMTP plugin for better delivery.


Transient Cache


Post Revision


Pages & Database tables