Listing Engine Backend
A powerful WordPress admin plugin for managing vacation rental listing data through dedicated database tables and custom wp-admin interfaces.
by Art-Tech Fuzion · github.com/art-tech-fuzion-projects/leb-vr · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/art-tech-fuzion-projects/leb-vr/archive/refs/heads/main.zipListing Engine Backend - Vacational Rental website wordpress plugin
A powerful WordPress admin plugin for managing vacation rental listing data through dedicated database tables and custom wp-admin interfaces.
Plugin Version: 2.5.8
Table of Contents
- Overview
- Who Should Use This Plugin
- Key Features
- Screenshots
- System Requirements
- Technology Stack
- Installation Guide
- Getting Started
- Admin Modules
- Database Schema
- How It Works
- For Developers
- Extension Points
- Security
- Troubleshooting
- Changelog
- Support & Contact
- License
Overview
Listing Engine Backend is a comprehensive WordPress plugin designed specifically for managing vacation rental listings. Unlike traditional WordPress approaches that rely on custom post types, this plugin maintains its own dedicated MySQL database schema for storing and managing all listing-related data.
The plugin provides a complete backend administration system that enables property managers to:
- Create and manage property types (Apartments, Villas, Cabins, etc.)
- Define amenities (WiFi, Pool, Parking, etc.)
- Set up locations/destinations
- Add and manage property listings with images and availability
- Handle blocked dates and availability management
This is an admin-focused data management system - it handles all the backend data operations but does not include a public frontend booking interface. This makes it perfect for developers who want to build their own custom frontend while having a robust backend already taken care of.
Who Should Use This Plugin
Property Managers & Rental Companies
- Vacation rental property managers handling multiple listings
- Property management companies needing centralized inventory control
- Rental businesses requiring structured data management
- Hosts managing properties across different locations
Web Developers & Agencies
- Developers building custom vacation rental platforms
- Agencies creating client websites with property listings
- Developers who need a robust backend without a predefined frontend
- Those wanting to integrate with existing WordPress themes
Use Cases
- Vacation home rental websites
- Holiday apartment directories
- Hotel or resort property management
- Real estate listing management
- Any website requiring structured property data
Key Features
1. Dedicated Database Tables
- Uses custom MySQL tables instead of WordPress posts
- Six specialized tables for different data types
- Efficient data storage and retrieval
- No interference with WordPress core posts
2. Comprehensive Admin Interface
- Dedicated LEB menu in WordPress admin
- Five main admin modules: Types, Database, Amenities, Locations, Properties
- Clean, intuitive user interface
- AJAX-powered operations for smooth experience
3. Property Management
- Full CRUD operations for property listings
- Property gallery with drag-and-drop reordering
- Blocked dates management with calendar interface
- Property duplication feature
- Bulk actions (publish, draft, delete)
- Status workflow (draft, pending, published, rejected)
- Auto-save for draft properties
4. Lookup Data Management
- Property types with unique slugs
- Amenities with icon support
- Locations with geographic data
- All data searchable and paginated
5. Media Integration
- WordPress Media Library integration for property images
- SVG icon support for amenities and locations
- Image validation (type, size, dimensions)
- Gallery management with drag-and-drop
6. Developer-Friendly
- Clean, well-documented codebase
- Multiple extension points
- AJAX action hooks for customization
- Database handler class for direct access
Screenshots
Main Features (Placeholder Descriptions)
- LEB Admin Menu - Top-level WordPress admin menu with icon
- Database Management - Table status and create/repair interface
- Types Management - List, add, edit property types
- Amenities Management - Create amenities with SVG icons
- Locations Management - Manage destinations with icons
- Properties Dashboard - Property listing with filters and bulk actions
- Add/Edit Property - Comprehensive property form with gallery
System Requirements
Server Requirements
- PHP Version: 7.4 or higher (uses typed properties)
- MySQL Version: 5.0 or higher
- WordPress Version: 5.0 or higher
WordPress Requirements
- Administrator access for setup
- Write access to database
- Media Library capability
Browser Requirements
- Modern web browser (Chrome, Firefox, Safari, Edge)
- JavaScript enabled for AJAX operations
Technology Stack
| Component | Technology |
|---|---|
| Backend | PHP 7.4+ |
| Frontend (Admin) | Vanilla JavaScript |
| Styling | Plain CSS |
| Database | MySQL via $wpdb |
| UI Model | Custom wp-admin templates + AJAX |
| Media | WordPress Media Library |
Architecture
- Plugin Bootstrap:
listing-engine-backend.php - Database Layer:
includes/db-schema.php,includes/class-db-handler.php - Admin Interface:
includes/admin-hooks.php - Asset Management:
includes/assets-loader.php - Templates:
templates/directory - JavaScript:
assets/js/directory - Styles:
assets/css/directory - Components:
components/directory
Installation Guide
Step 1: Upload Plugin
- Download the plugin zip file
- Navigate to WordPress Admin > Plugins > Add New
- Click "Upload Plugin" button
- Choose the plugin zip file and click "Install Now"
- Alternatively, upload via FTP to
/wp-content/plugins/
Step 2: Activate Plugin
- Go to WordPress Admin > Plugins
- Find "Listing Engine Backend" in the list
- Click "Activate"
Step 3: Initial Setup (Important)
After activation, the plugin does NOT automatically create database tables. You must manually create them:
- Log in as Administrator
- Navigate to LEB > Database
- Click "Create / Repair" for each required table:
- Types Table
- Amenities Table
- Locations Table
- Property Table
- Images Table
- Block Dates Table
Getting Started
Recommended Setup Order
- Database - Create all required tables first
- Types - Add property types (Apartment, Villa, Cabin, etc.)
- Amenities - Define amenities (WiFi, Pool, Parking, etc.)
- Locations - Add destinations (Dubai, Goa, New York, etc.)
- Properties - Start creating property listings
Quick Start Checklist
- [ ] Activate plugin
- [ ] Create database tables
- [ ] Add at least one property type
- [ ] Add at least one amenity
- [ ] Add at least one location
- [ ] Create your first property
Admin Modules
1. Types Module
Purpose: Manage property type categories
Features:
- Paginated list view with search
- Add/Edit type form with name and slug
- Auto-slug generation from name
- Duplicate slug prevention
- Bulk delete capability
Location: LEB > Types
2. Database Module
Purpose: Manage plugin database tables
Features:
- View status of all plugin tables
- Create new tables
- Repair existing tables
- Table status indicators
Location: LEB > Database
3. Amenities Module
Purpose: Define property amenities and features
Features:
- Amenity list with search and pagination
- Icon selection via WordPress Media Library
- Icon validation (SVG/WEBP, 24x24px, max 1MB)
- Bulk operations
- Name and icon management
Location: LEB > Amenities
4. Locations Module
Purpose: Manage destinations and regions
Features:
- Location list with search
- Add/Edit with name and unique slug
- Icon support via Media Library
- Slug auto-generation
- Duplicate prevention
Location: LEB > Locations
5. Properties Module
Purpose: Main property listing management
Features:
- Dashboard with status tabs (All, Draft, Pending, Published, Rejected)
- Live search functionality
- Bulk actions (Publish, Draft, Delete)
- Property duplication
- Add/Edit property form with:
- Title and description
- Property type selection
- Location selection
- Multiple amenity selection
- Address and pricing
- Guest capacity, bedrooms, beds, bathrooms
- Image gallery (5-10 images required)
- Blocked dates calendar
- Auto-save for drafts
Location: LEB > Properties
Database Schema
Table: {prefix}ls_types
Stores property type categories.
| Column | Type | Description |
|---|---|---|
| id | bigint unsigned | Primary key, auto-increment |
| name | varchar(255) | Type display name |
| slug | varchar(255) | Unique URL-friendly identifier |
| updated_at | datetime | Last modification timestamp |
Table: {prefix}ls_amenities
Stores available amenities.
| Column | Type | Description |
|---|---|---|
| id | bigint unsigned | Primary key |
| name | varchar(255) | Amenity name |
| svg_path | varchar(2048) | Icon data (JSON with path + attachment ID) |
| updated_at | datetime | Last update |
Table: {prefix}ls_location
Stores destinations and locations.
| Column | Type | Description |
|---|---|---|
| id | bigint unsigned | Primary key |
| name | varchar(255) | Location name |
| slug | varchar(255) | Unique slug |
| svg_path | varchar(2048) | Icon JSON data |
| updated_at | datetime | Last update |
Table: {prefix}ls_property
Core property listing table.
| Column | Type | Description |
|---|---|---|
| id | bigint unsigned | Primary key |
| host_id | bigint unsigned | WordPress user ID of creator |
| title | varchar(255) | Property title |
| location | longtext | Location reference |
| address | longtext | Full address |
| amenities | longtext | Amenity IDs |
| type | varchar(255) | Property type |
| guests | int | Guest capacity |
| bedroom | int | Number of bedrooms |
| bed | int | Number of beds |
| bathroom | int | Number of bathrooms |
| description | longtext | Property description |
| price | bigint | Price per night |
| status | varchar(50) | draft/pending/published/rejected |
| updated_at | datetime | Last update |
Table: {prefix}ls_img
Stores property gallery images (JSON format).
| Column | Type | Description |
|---|---|---|
| id | bigint unsigned | Primary key |
| property_id | bigint unsigned | Related property |
| image | text | Full gallery JSON |
Table: {prefix}ls_block_date
Stores blocked/unavailable dates.
| Column | Type | Description |
|---|---|---|
| id | bigint unsigned | Primary key |
| property_id | bigint unsigned | Related property |
| dates | longtext | Blocked dates JSON |
| created_at | datetime | Creation timestamp |
How It Works
Data Flow
- User Action: Admin performs action in wp-admin interface
- JavaScript: AJAX call sent to admin-ajax.php
- PHP Handler: Corresponding AJAX handler processes request
- Database Handler: LEB_Database_Handler performs CRUD operation
- Database: Data stored in custom MySQL tables
- Response: JSON response returned to frontend
- UI Update: JavaScript updates interface with result
Property Creation Workflow
- Admin opens Properties > Add New
- Form loads lookup data (types, locations, amenities) via AJAX
- Admin fills in property details
- Admin selects images from Media Library (5-10 required)
- Admin sets blocked dates using calendar
- Form validates required fields
- AJAX sends data to server
- Database Handler creates:
- Main property record
- Gallery JSON record
- Blocked dates JSON record
- Success notification displayed
Duplication Feature
When duplicating a property:
- Main property data is cloned
- Title gets " - Copy" suffix
- Status always resets to "draft"
- Gallery and blocked dates are also duplicated
For Developers
Understanding the Codebase
Key files to understand the plugin:
-
listing-engine-backend.php
- Plugin entry point
- Defines constants
- Loads dependencies
- Handles activation/deactivation
-
includes/admin-hooks.php
- Menu registration
- Page render callbacks
- All AJAX handlers
- SVG compatibility hooks
-
includes/class-db-handler.php
- Central CRUD operations
- Database table management
- Data retrieval methods
-
includes/db-schema.php
- Table creation SQL
- Default data definitions
- Table status checker
-
includes/assets-loader.php
- Conditional CSS/JS loading
- AJAX configuration
- Asset path management
Working with the Plugin
Adding a New Data Module
Follow this pattern:
- Add schema function to
db-schema.php - Add handler methods to
class-db-handler.php - Add menu and AJAX hooks to
admin-hooks.php - Create page template in
templates/ - Add JavaScript and CSS in
assets/ - Register assets in
assets-loader.php
Database Handler Usage
// Get database handler instance
$handler = new LEB_Database_Handler();
// Create a new type
$handler->create_type('Villa', 'villa');
// Get all amenities
$handler->get_amenities('', 1, 10);
// Update property
$handler->update_listing($property_id, $data);
AJAX Actions
All AJAX actions require:
- Capability:
manage_options - Nonce:
leb_nonce
Example AJAX call:
jQuery.ajax({
url: ajaxurl,
type: 'POST',
data: {
action: 'leb_get_types',
nonce: leb_vars.nonce,
search: '',
page: 1
},
success: function(response) {
console.log(response.data);
}
});
Available AJAX Actions
Types:
leb_get_types- List typesleb_create_type- Create typeleb_update_type- Update typeleb_get_type- Get single typeleb_delete_type- Delete typeleb_bulk_delete_types- Bulk delete
Database:
leb_db_status- Get table statusleb_db_create_repair- Create/repair table
Amenities:
leb_amen_get_amenities- List amenitiesleb_amen_create_amenity- Createleb_amen_update_amenity- Updateleb_amen_get_amenity- Get singleleb_amen_delete_amenity- Deleteleb_amen_bulk_delete_amenities- Bulk delete
Locations:
leb_loc_get_locations- Listleb_loc_create_location- Createleb_loc_update_location- Updateleb_loc_get_location- Get singleleb_loc_delete_location- Deleteleb_loc_bulk_delete_locations- Bulk delete
Properties:
leb_listing_get_listings- List propertiesleb_listing_get_listing- Get singleleb_listing_create_listing- Createleb_listing_update_listing- Updateleb_listing_delete_listing- Deleteleb_listing_bulk_delete- Bulk deleteleb_listing_bulk_status- Bulk status updateleb_listing_get_amenities_all- Get all amenitiesleb_listing_get_locations_all- Get all locationsleb_listing_get_types_all- Get all typesleb_listing_duplicate- Duplicate property
Extension Points
Filters
leb_default_type_rows- Filter default type entries for seeding
Classes
LEB_Database_Handler- Reusable class for CRUD and schema operations
Template Customization
The best places to extend functionality:
templates/- Add new admin UI pagesassets/js/- Add new client-side interactionsassets-loader.php- Register new module assetsadmin-hooks.php- Add new admin pages or AJAX handlers
Security
Implemented Security Measures
-
Capability Checks
- Every admin page verifies
manage_optionscapability
- Every admin page verifies
-
Nonce Verification
- All AJAX requests verify
leb_nonce
- All AJAX requests verify
-
Input Sanitization
sanitize_text_field()for text fieldssanitize_title()for slugsesc_url_raw()for URLsabsint()for integerswp_kses_post()for HTML content
-
Database Security
- Queries use
$wpdb->prepare()where applicable - Safe database operations
- Queries use
-
SVG Security
- Aggressive SVG compatibility for admin display
- SVG metadata generation skipped to avoid processing failures
Troubleshooting
Tables Missing After Activation
Issue: Database tables not created after plugin activation.
Solution: This is expected. Tables must be manually created:
- Go to LEB > Database
- Click "Create / Repair" for each table
SVG Uploads Failing
Check:
- Logged in as administrator
- File is SVG or SVGZ format
- Icon dimensions are 24x24px
Amenity/Location Icon Not Displaying
Check:
- Stored SVG path contains valid path
- Media Library attachment still exists
- Icon is exactly 24x24px
Property Creation Fails
Check:
- At least 5 images selected
- Images are JPEG, WEBP, or AVIF
- Each image ≤ 1MB
- Type, location, address, price, and title are present
- Custom tables exist
Bulk Actions Not Working
Check:
- Logged in as administrator
- Nonce loaded correctly
- Check browser console for errors
Changelog
Version 2.5.8
- Current version
- Full CRUD operations for properties
- AJAX-powered admin interface
- Custom database tables
- Media Library integration
- Property duplication
- Bulk actions
- Blocked dates management
Support & Contact
Developer Information
Plugin Developer: Art-Tech Fuzion
Company Website: https://arttechfuzion.com
Plugin URI: https://arttechfuzion.com
Support
For technical support, feature requests, or bug reports:
- Visit our website: https://arttechfuzion.com
- Contact through the website support channels
- Report issues directly
Custom Development
We also offer custom development services:
- Custom feature additions
- Integration with third-party systems
- Frontend development
- Theme integration
Contact us through our website for custom development inquiries.
License
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
This plugin is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or any later version.
This plugin is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
Credits
Developed by Art-Tech Fuzion
Built with:
- WordPress
- PHP 7.4+
- MySQL
- Vanilla JavaScript
Last Updated: May 2026