Rentals & Bookings — Solo & Marketplace

Сүрөттөө

WooCommerce rental bookings plugin for Solo stores and multi-vendor Marketplaces. Works standalone with WooCommerce (Solo Mode) or with Dokan for a full rental marketplace (Marketplace Mode). Availability calendars, flexible pricing rules, deposits, and security deposits.

For full documentation, visit https://wahra.tn/plugins/?wahra-docs.

Support & Community

Have questions? Found a bug? Want to suggest a feature?

Our team responds to all support questions within 24-48 hours.

Скриншоттор

  • Booking wizard – Welcome step with draft resume and progress tracking.
  • Booking wizard – Category selection (Accommodation, Vehicle, Equipment, Space, Service, Product).
  • Booking wizard – Availability setup including schedule, buffer times, and slot durations.
  • Booking wizard – Dynamic pricing engine showing weekend, long-stay, and seasonal rule configuration.
  • Booking wizard – Payment settings for deposits, security deposits, and balance collection methods.
  • Vendor dashboard – Bookings management interface with status-based filtering and lifecycle actions.
  • Vendor dashboard – Interactive FullCalendar view with color-coded booking statuses and event previews.
  • Vendor dashboard – Comprehensive analytics showing KPI cards, revenue charts, and category performance.
  • Admin settings – Platform category management and global booking configuration.
  • Admin settings – Payment and security deposit policy configuration per category.
  • Admin settings – Granular vendor permissions matrix to control dashboard capabilities.
  • Frontend product page – The customer-facing booking interface with date picker and price calculation.

Орнотуу

Automatic Installation

  1. Go to Plugins > Add New in your WordPress admin panel
  2. Search for WooCommerce Rentals Bookings
  3. Click Install Now and then Activate
  4. Navigate to Rentals > Settings (Solo Mode — WooCommerce only) or WooCommerce > Rentals Settings (Marketplace Mode — with Dokan) to configure

Manual Installation

  1. Download the plugin ZIP file from WordPress.org
  2. Go to Plugins > Add New > Upload Plugin
  3. Select the ZIP file and click Install Now
  4. Activate the plugin
  5. The plugin auto-detects your setup: without Dokan it runs in Solo Mode (WooCommerce only); with Dokan active it runs in Marketplace Mode (multi-vendor)

After Activation

  1. Go to Rentals > Settings (Solo Mode) or WooCommerce > Rentals Settings (Marketplace Mode with Dokan) to configure platform categories, pricing rules, and payment settings
  2. Create or edit a WooCommerce product and enable it as a rental via the Rental product data tab (solo) or the Booking Wizard in the Dokan vendor dashboard (Marketplace Mode)
  3. Set availability, pricing, and payment options
  4. Publish the product – customers can now book it from your shop

FAQ.KG

Does this plugin work without Dokan?

Yes. In Solo Mode the plugin works with WooCommerce alone — no Dokan required. You get a full Rentals menu in wp-admin with bookings management, calendar, analytics, and settings. Install Dokan to unlock Marketplace Mode and let multiple vendors manage their own rentals independently.

What WooCommerce version is required?

WooCommerce 8.0 or higher. The plugin is tested up to WooCommerce 10.4.3 and declares HPOS (High-Performance Order Storage) compatibility.

Does it work with WooCommerce HPOS?

Yes. The plugin declares HPOS compatibility and uses custom database tables for booking data, so it works with both the legacy post-based storage and the new HPOS tables.

Can I use this for hourly rentals?

Yes. The equipment, space, and service categories support time slot booking modes in addition to daily rentals. You can configure slot durations (e.g., 1 hour, 2 hours, half day) per category.

How do deposits work?

When a customer books a rental, they can be charged a deposit (percentage or fixed amount) at checkout. The remaining balance is collected later – online, by bank transfer, cash on delivery, or another method. Deposit settings are configured per platform category by the admin.

What is a security deposit?

A security deposit is a hold or charge to cover potential damage to the rental item. When the item is returned in good condition, the security deposit is released. If there is damage, the vendor can forfeit all or part of the security deposit.

Can vendors set their own prices?

This is controlled by the platform admin through vendor permissions. Per category, the admin can allow or disallow vendors from setting their own base prices, deposit amounts, security deposits, and scheduling preferences.

How does the booking lifecycle work?

Bookings follow the flow: pending > confirmed > checked_in > checked_out > completed. Automated cron jobs handle routine transitions (auto-start on the rental start date, auto-return on the end date). Vendors can also trigger transitions manually from their dashboard.

What happens when a rental is returned?

The booking moves to checked_out status. The vendor then reviews the item condition, records any damage, and updates payment statuses. Clicking “Validate and Complete” moves the booking to completed status. This is the restitution validation workflow.

Does it support multiple languages?

Yes. The plugin ships with translation files for 12 languages: Arabic, Chinese, French, German, Italian, Japanese, Dutch, Polish, Portuguese (Brazil), Russian, Spanish, and Turkish. You can add more translations using tools like Loco Translate or Poedit.

Is the booking wizard mobile-friendly?

Yes. The booking wizard is a React single-page application designed mobile-first. It is fully responsive and works on phones, tablets, and desktops. The wizard auto-saves drafts so vendors can start on one device and finish on another.

Can I customise the appearance?

Yes. The plugin includes colour customisation settings that let you change the primary colour used in the booking interface, calendar, and vendor dashboard elements.

How does the availability calendar work?

The calendar uses FullCalendar to display all bookings in day, week, or month views. Each booking is colour-coded by status. Vendors can use the calendar to spot scheduling conflicts, upcoming bookings, and available time slots at a glance.

What pricing rules are available?

Five types of dynamic pricing rules: weekend pricing, long-stay discounts, early-bird discounts, last-minute discounts, and seasonal pricing. Each rule type is available to specific platform categories (e.g., seasonal pricing is only for accommodation and spaces). Rules are configured globally by the admin and optionally overridden by vendors.

Does it integrate with WooCommerce checkout?

Yes. Bookings are created as part of the standard WooCommerce checkout flow. The deposit amount is charged at checkout and added as a line item to the WooCommerce order.

Are there any conflicts with other booking plugins?

The plugin uses its own custom database tables and does not modify WooCommerce core tables. It is designed to coexist with other plugins. If you experience a conflict, please report it in the support forum and we will investigate.

How do I handle cancellations?

Vendors can cancel bookings from the dashboard when the booking is in pending, confirmed, or checked_in status. The system also automatically cancels pending bookings whose start date has passed without confirmation.

Can I create bookings manually?

Yes. Vendors can create manual bookings through the booking management interface without requiring a customer checkout. This is useful for phone orders, walk-ins, or recording existing reservations.

What emails does the plugin send?

The plugin sends automated emails for booking confirmations, status changes, balance payment reminders, and cancellations. Email templates are configurable through the notification settings.

Does it work with page builders?

The booking interface works independently of page builders since it uses WooCommerce product pages and the vendor dashboard. The plugin does not add custom blocks or shortcodes that would conflict with page builders.

How is data stored?

The plugin creates 8 custom database tables for bookings, availability indexes, daily availability, pricing rules, wizard drafts, holds, blackout dates, and logs. This approach is faster than storing data in post meta and keeps the wp_posts table clean.

What happens when I delete the plugin?

The uninstall process checks a “preserve data” option first. If data preservation is off, it removes all 8 custom tables, plugin options, post and user meta, capabilities, cron hooks, and transients. If preservation is on, data is kept for later reinstallation.

Is the source code included?

Yes. The full React source code for the booking wizard is included in the /app/src/ directory alongside the compiled JavaScript. This satisfies WordPress.org’s requirement for readable/auditable source code.

Can I use this on a multisite installation?

The plugin is designed for single-site installations. Multisite support has not been tested and is not officially supported at this time.

Where can I get support?

Post your question in the WordPress.org support forum and we will respond within 24-48 hours. You can also visit documentation for more details.

How do I report a bug?

Please use the WordPress.org support forum or open an issue on GitHub.

Сын-пикирлер

There are no reviews for this plugin.

Contributors & Developers

“Rentals & Bookings — Solo & Marketplace” is open source software. The following people have contributed to this plugin.

Мүчөлөрү

Өзгөртүүлөр

2.2.0

Solo mode overhaul, booking lifecycle management, and admin UX improvements.

New Features:
* Full booking lifecycle management in solo mode (confirm, start, return, complete, cancel) – replaced basic bookings table with interactive vendor dashboard
* Early check-in blocking – prevents check-in before scheduled start date
* Vendor price adjustment at restitution – vendors can adjust total price when completing a booking
* Auto-confirm bookings setting in admin Settings > Bookings tab
* Notification email setting in admin Settings > Notifications tab
* Visual customization page – dedicated submenu for brand colors and client-facing texts

Improvements:
* Renamed solo mode main menu from “Rentals & Bookings” to “Rentals”
* Replaced “Fine-Tune” submenu with streamlined “Visual” submenu (colors + texts only)
* Moved notification email and auto-confirm settings from Fine-Tune into admin Settings tabs
* Solo mode settings sync – auto-confirm and notification email now sync between platform options and vendor user meta
* Hide “Add to cart” setting for rental products
* Admin menu consolidation in solo mode – single unified menu
* Fixed translation encoding issues across all 13 locale files (.po/.mo)
* Replaced hardcoded French strings in vendor JS with localized i18n strings
* All vendor-facing JS strings now use wahrbVendorConfig.i18n for proper translation support
* URL helper centralization – all dashboard URLs use wahrb_get_dashboard_url()

Technical:
* New template: templates/dokan/visual-settings.php – standalone visual settings for solo mode
* Bookings page in solo mode now loads vendor CSS/JS assets for full lifecycle UI
* 147 tests passing

2.1.0

  • New: Initial Setup Wizard – guided first-run configuration for admins
  • New: Automatic admin notice on first activation with link to setup wizard
  • New: 4-step wizard: Welcome, Categories, Settings, Ready
  • Improved: Setup Wizard visual redesign with full-screen admin experience and responsive layout
  • New: Relaunch Setup Wizard action available from Settings -> Tools
  • New: Dedicated Tools settings tab with system information summary
  • Improved: Existing installs auto-skip wizard on upgrade

2.0.6

WordPress.org ranking optimisation and admin UX improvements.

New Features:
* Contextual support widget on plugin admin pages (links to docs and forums)
* Ethical review prompt after 5 completed bookings or 30 days of usage
* Environment compatibility checker (PHP, WordPress, WooCommerce version warnings)
* SVN freshness reminder for developers (90-day update prompt)

Improvements:
* Expanded readme.txt with comprehensive feature descriptions and 25+ FAQs
* Updated “Requires at least” to WordPress 6.6
* Added screenshot placeholders for WordPress.org listing
* All new admin classes are self-registering standalone files (zero changes to existing code)

2.0.5

Added solo vendor mode – the plugin now works with WooCommerce alone, without requiring Dokan.

New Features:
* Solo vendor mode: full WP admin integration (Rentals menu with Bookings, Wizard, Calendar, Analytics, Settings)
* WooCommerce product data tab for rental configuration (solo mode)
* WP Dashboard widget showing booking stats and revenue (solo mode)
* Auto-detection of Dokan presence at runtime – single plugin ZIP works in both modes
* Mode-aware navigation: Dokan frontend dashboard URLs or WP admin URLs based on active mode

Bug Fixes:
* Fixed duplicate rental product fields appearing in solo mode (Loader and Solo Integration both registered fields)
* Removed dead wahrb_should_load_assets filter hook from Solo Integration
* Removed redundant asset enqueue in Solo Integration (already handled by Loader)
* Fixed outdated inline comment referencing wrong function name in Solo Integration

Improvements:
* Dokan is no longer required for activation – WooCommerce is the only hard dependency
* REST API vendor permission checks now support both Dokan sellers and WooCommerce shop managers
* Stripe detection in admin settings now checks both Dokan Stripe Connect and standard WC Stripe gateway
* All templates gracefully degrade when Dokan is absent (no fatal errors)
* Product editing hooks in Loader now conditional on Dokan mode (Solo Integration provides dedicated Rental tab)
* Added Requires Plugins: woocommerce header for WordPress 6.5+ dependency management

2.0.4

UI/UX improvements for calendar, dashboard widget, admin analytics, and updated screenshots.

Bug Fixes:
* Fixed calendar event text invisible (white on light blue) due to FullCalendar 6 CSS specificity override
* Fixed dashboard widget CSS silently discarded due to dokan-style handle (already printed before template)
* Fixed dashboard widget missing closing div tag breaking DOM structure
* Fixed admin analytics KPI values truncated at bottom (Arabic currency symbol clipped by overflow:hidden)

Improvements:
* Redesigned vendor dashboard booking widget with 2×2 stat grid, color-coded numbers, revenue highlight row, icon buttons, and active bookings badge
* Calendar event status colors now properly override FullCalendar 6 defaults with increased CSS specificity
* Updated plugin screenshots to reflect current UI

2.0.3

Bug fixes for booking API, email notifications, payment processing, and test coverage.

Bug Fixes:
* Fixed cancellation email not sent to vendor when recipient set to both
* Fixed cancel action bypassing status update hooks, preventing notifications
* Fixed API refund endpoint returning incorrect response format
* Fixed booking list API allowing invalid orderby parameter
* Fixed invalid refunded status in API booking filters
* Fixed security deposit unconditionally captured regardless of settings
* Fixed vendor booking API returning zero amounts for deposit and balance

Developer:
* Added regression test suite covering all fixed issues (147 total tests)

2.0.2

Minor internal improvements and build configuration updates.

2.0.1

Bug fixes, calendar improvements, and vendor permissions update.

Improvements:
* Calendar: Added status filter dropdown (filter bookings by Pending, Confirmed, Active, Returned, Completed, Cancelled)
* Calendar: Added “Returned” (checked_out) status with distinct amber color in events, legend, and popup
* Calendar: Fixed event CSS class prefix mismatch (fc-event-* now matches stylesheet)
* Vendor Settings: Payment section now shows read-only summary cards (Deposit, Security, Balance) when vendor cannot edit
* Vendor Permissions: Default changed to allow vendors to manage deposit and security deposit settings
* Admin Settings: Per-tab save fix prevents cross-tab data corruption when saving settings
* Admin Settings: Stripe Connect message changed from error to informational notice
* Vendor Settings: Fixed “Client Display Texts” layout (inputs no longer constrained to 200px)
* Platform Categories: Added auto-repair for corrupted all-disabled categories in database

Translations:
* Added 10+ missing French translations for vendor settings and calendar strings

Bug Fixes:
* Fixed vendor payment section showing only “managed by platform” message due to false permission defaults
* Fixed Flatpickr blocked dates integration in vendor manual booking modal

2.0.0

Major release with complete UI/UX overhaul, full booking lifecycle, and comprehensive currency/i18n fixes.

New Features:
* Full booking lifecycle: pending > confirmed > checked_in > checked_out > completed with automated cron transitions
* Vendor restitution validation workflow (condition review, damage amount, payment status updates)
* Manual vendor actions: check-in, check-out, complete, cancel with REST API endpoints
* Payment tracking with auto-timestamps (deposit_paid_at, balance_paid_at, security_captured_at, security_released_at)
* Vendor analytics dashboard redesigned with 3-tab layout (Overview, Charts, Products and Categories)
* KPI summary cards (Total Bookings, Revenue, Conversion Rate, Upcoming) always visible above tabs
* Status breakdown donut chart and category breakdown donut chart in Overview tab
* Monthly bookings and revenue bar charts in Charts tab
* Top rented products and category stats tables in Products and Categories tab
* Admin analytics dashboard with active vendor count and platform-wide statistics
* Per-category payment settings (deposit, security, balance configured per platform category)
* Per-category vendor permissions (overrides resolved per category instead of globally)
* Visual Customization color picker redesigned with native color swatches (72x72px circular inputs in CSS grid)
* Stats cache invalidation on booking creation and status change

Security Fixes:
* Fix: CRITICAL – Stored XSS vulnerability in booking detail modals via unescaped user data
* Fix: HIGH – Security deposit release/refund marked as successful even when WooCommerce refund failed
* Fix: HIGH – Hold race condition allowed two users to hold the same dates when updating existing hold
* Fix: HIGH – Wizard publish called apply_wizard_data_to_product() twice, potentially overriding Dokan hook changes
* Fix: HIGH – Timezone mismatch in availability check (strtotime vs gmdate comparison)

Critical Fixes:
* Fix: CRITICAL – Soft-deleted blackout dates were still blocking availability in daily sync
* Fix: CRITICAL – Cron draft cleanup never ran due to method name mismatch
* Fix: CRITICAL – Booking reminder emails silently failed due to missing method in emailer
* Fix: CRITICAL – Statistics revenue calculation used non-existent column – corrected to pricing_snapshot JSON
* Fix: CRITICAL – Booking payment schedule now resolves deposit/security from product’s platform category
* Fix: CRITICAL – Wizard REST endpoint returns per-category payment map instead of flat payment keys
* Fix: CRITICAL – Dokan vendor settings returns payment_by_category and permissions_by_category structures
* Fix: Currency symbol encoding – get_woocommerce_currency_symbol() HTML entities now decoded for all JS/JSON contexts (13 files fixed)
* Fix: wp_add_inline_style handle changed from dokan-style to wahrb-vendor-styles (CSS was silently discarded)
* Fix: Settings page tabs not working – all content collapsed onto Payment tab due to CSS handle bug
* Fix: Analytics page styles missing – same dokan-style handle root cause
* Fix: Bookings list PHP parse error – missing closing tag before HTML comment

UI/UX Improvements:
* Email config radio cards improved with stronger borders, shadows, and visual feedback
* Day abbreviations standardized: M to Mo, W to We, F to Fr across wizard steps 3 and 4
* Wizard step interactions fixed (offer type selection, pricing toggles, payment toggles, publish)
* Replaced all broken wp_add_inline_script calls with properly enqueued JS files
* Product page booking card enhanced with shadow, borders, z-index
* Wizard Create new product error handling with snackbar notifications
* Eye button (booking detail) on vendor bookings list fixed
* Phone validation relaxed to 8-digit minimum for valid Tunisian numbers

Internationalization:
* Removed all hardcoded DT currency fallbacks from React components – currency always from WooCommerce config
* Completed React wizard internationalization – all French strings replaced with t() calls
* Added French translations for analytics page (status breakdown, category breakdown, tab labels, KPI labels)
* Calendar day abbreviations properly localized (Mo to Lu, We to Me, Fr to Ve for French)
* All hardcoded French strings in wahrb-calendar.js replaced with i18n references
* Source strings in English per WordPress.org requirements

Architecture:
* WAHRB_Platform_Categories helper methods: get_payment_settings(), get_product_payment_settings(), get_all_payment_settings(), get_vendor_permissions()
* Activator default payment settings restructured to per-category format for all 6 categories
* Platform Categories tab is now the default admin settings tab
* General tab renamed to Advanced and moved after Notifications
* Chart.js charts call resize() on tab switch to fix canvas rendering
* Booking number generation with collision detection retry loop

Developer:
* Expanded test suite from 6 to 105 tests (phone validation, email formatting, stats, i18n, per-category architecture)
* Added WordPress.DB.PreparedSQL.InterpolatedNotPrepared to 40 phpcs annotations
* Added PluginCheck.Security.DirectDB.UnescapedDBParameter to all 117 phpcs annotations
* Deactivator and uninstall.php cleared phantom cron hooks – corrected to actual hooks
* Added root index.php for directory listing protection
* All wizard JS uses vanilla JS (no jQuery dependency)
* PHP data passed to JS via wp_localize_script for WordPress.org compliance

1.0.2

  • Fix: Renamed plugin prefix from DRB to WAHRB (4+ characters) for WordPress.org compliance
  • Fix: Renamed main plugin file to wahra-rentals-bookings.php
  • Fix: Removed load_plugin_textdomain (WordPress.org handles translations automatically)
  • Fix: Moved all inline scripts to wp_add_inline_script()
  • Fix: Improved input sanitization (wp_unslash, map_deep, sanitize_text_field on session data)
  • Fix: Improved output escaping (wp_kses, wp_strip_all_tags on inline CSS)
  • Fix: Added $wpdb->prepare() to all LIKE queries
  • Fix: Added phpcs:ignore annotations to direct database queries
  • Fix: Fixed mixed line endings in template files
  • Fix: Removed unnecessary development files from distribution
  • Fix: Added source code documentation in readme.txt
  • Fix: Updated third-party libraries to latest versions
  • Fix: Translated remaining hardcoded French strings

1.0.1

  • Fix: Enhanced security with improved nonce verification and output escaping
  • Fix: Standardized date handling for better timezone support
  • Fix: Optimized SQL queries and database interactions
  • Fix: Minor bug fixes and performance improvements

1.0.0

  • Initial release
  • Mobile-first vendor wizard
  • Advanced pricing engine with rules
  • Availability management system
  • Security deposit handling
  • Multi-step payment support
  • Email notification system
  • Dokan dashboard integration