Eid Al Etihad 55: 20% off websites and 55% off the first month of SEO, from 25 November.See the offers
所有产品
WordPress plugin · v1.0.0

Zi Yacht Booking – Yacht & Boat Charter Booking for WordPress

Hourly yacht and boat charters booked online, with WhatsApp or deposit checkout.

Yacht Finder: filter by group size, budget per hour and boat type – results update instantly with badges and instalment text

$99.00
One-time payment · no subscription

Your license key appears in your account (My license keys) as soon as the payment is confirmed, and is emailed to you.

Overview

Most yacht rental websites still end in the same place: a contact form, a long WhatsApp thread and a spreadsheet. Zi Yacht Booking gives your guests the answers they look for – which boat fits our group, what does it cost for three hours on Saturday, is 6 pm free – and turns them into a booking with a reference number in under a minute.

Built for hourly charters

Every boat has a price per hour, a minimum and maximum duration, a weekend price and as many seasonal rules as you need. Start times are generated from your schedule, the buffer between charters is respected, and blackout dates close a day for one boat or the whole fleet.

A booking builder that sells

Guests pick the occasion, the boat, the date and start time, the hours and guests, then add extras such as a cake, decoration, dinner per guest or jet skis per hour. The total updates on every tap, together with the deposit due now and an instalment line like 4 × AED 450 with tabby. When they submit, they get a booking reference straight away.

Your way of confirming

  • Request mode: the guest confirms on WhatsApp with a prefilled summary, and you and the guest both receive an e-mail.
  • Payment mode: a WooCommerce order is created for the deposit or the full amount and paid with any gateway you already use. Payment, cancellation and refund update the booking automatically.

No double bookings

Each booking claims its time in a table with a unique key per boat and 15-minute block. If two guests try the same slot at the same moment, the database accepts only one of them and the other is asked to choose another time.

Everything your team needs

  • Bookings list with filters, bulk status changes and CSV export
  • Month calendar per boat, manual bookings and rescheduling
  • iCal feed per boat for Google, Apple or Outlook calendars
  • Customer e-mails for every status change

The front end is plain JavaScript with no jQuery, mobile-first, keyboard accessible and ready for Arabic and other right-to-left languages, with English and Arabic translations included. Your colours are set with CSS variables, and every boat page carries Schema.org Product and Offer data.

Features

  • Flip-card fleet grid

    Photo, badges, guests, minimum hours, length, inclusions, hourly price and instalments, with a Specs back face. Fully booked boats keep a card and an Other dates WhatsApp button.

  • Instant Yacht Finder

    Filter by group size, budget per hour and boat type without reloading the page, with a live count and a WhatsApp fallback when nothing matches.

  • Multi-step booking builder

    Occasion, boat, date and start time, hours and guests, extras and details, with a live total and a booking reference on submit.

  • Database-level double-booking guard

    A unique key per boat and 15-minute block makes overlapping bookings impossible, buffer included.

  • Flexible hourly pricing

    Base price, weekend price and date-range or weekday rules for holidays and seasons, plus minimum and maximum hours per boat.

  • Extras that add revenue

    Charge per booking, per hour or per guest, with quantities, per-boat availability and occasion-based suggestions.

  • WhatsApp or WooCommerce checkout

    Confirm requests on WhatsApp with a prefilled summary, or take a deposit or full payment through WooCommerce. HPOS compatible.

  • Instalment messaging

    Show text such as "4 × AED 450 with tabby / tamara" on cards, the calculator and the builder, with a configurable number of payments.

  • Admin calendar, CSV and iCal

    Month calendar per boat, bookings list with filters and CSV export, manual bookings, rescheduling and an iCal feed per boat.

  • Single-boat price calculator

    Hours, guests and an optional date that applies weekend or seasonal rates, with a per-guest estimate and Book now and WhatsApp buttons.

  • SEO and accessibility

    Schema.org Product and Offer with an hourly unit price, keyboard and screen-reader friendly components and respect for reduced-motion settings.

  • RTL, Arabic and theming

    Logical CSS for right-to-left sites, an Arabic translation, CSS variables for colours and radius, plus shortcodes and Gutenberg blocks.

Installation

  1. 1In WordPress go to Plugins → Add New → Upload Plugin, choose zi-yacht-booking-1.0.0.zip, install and activate.
  2. 2Open Yacht Booking → License, paste the license key from your engzaki.pro e-mail and click Activate.
  3. 3Open Yacht Booking → Settings: set the currency, your WhatsApp number, the schedule and the booking flow, then click "Create a booking page for me".
  4. 4Add your boats in Yacht Booking → Fleet: type, capacity, minimum hours, price per hour, photos and occasions.
  5. 5Add extras such as a cake, decoration, catering, a photographer or jet skis in Yacht Booking → Extras.
  6. 6Place the Yacht Finder block or the [ziyb_finder] shortcode on your home or fleet page.

Documentation

Show the full documentation+

Hourly yacht and boat charter booking for WordPress, by Zaki International (https://engzaki.pro).

Product page: https://engzaki.pro/en/products/yacht-boat-charter-booking-wordpress


1. Overview

Zi Yacht Booking is for businesses that rent yachts, catamarans, speed boats, houseboats, self-drive boats and fishing boats by the hour. It covers the whole flow, from showing the fleet to the confirmed booking:

Part What it does
Fleet grid Cards with photo, badges, guests, minimum hours, length, inclusions, hourly price, instalment text and a flip "Specs" back face. Fully booked boats show an "Other dates" WhatsApp button.
Yacht Finder Instant filters (group size, budget per hour, boat type) with a live result count and an empty state.
Price calculator One boat: hours and guests steppers, optional date (applies weekend / seasonal rate), total, per-guest estimate, instalments, Book now / Book on WhatsApp.
Price table Boat, guests, minimum hours, price per hour.
Booking builder Occasion → boat → date & start time → hours & guests → extras → details. Live total, deposit due now, instalment text, booking reference on submit.
Booking flows Request: reference + prefilled WhatsApp confirmation + e-mails. WooCommerce: deposit or full payment on the order-pay page.
Admin Bookings list (filters, bulk status, CSV), booking detail (status, reschedule, totals, notes), month calendar, manual bookings, iCal feed per boat.

2. Requirements

  • WordPress 6.0 or newer (tested up to 6.8)
  • PHP 7.4 – 8.3
  • MySQL 5.7+ / MariaDB 10.3+ (InnoDB recommended)
  • Optional: WooCommerce 7.0+ for online deposits / payments (HPOS and cart/checkout blocks compatible)

3. Installation

  1. Plugins → Add New → Upload Plugin → choose zi-yacht-booking-1.0.0.zip → Install → Activate.
  2. A new Yacht Booking menu appears. Six starter occasions are created (Birthday, Sunset trip, Family day, Proposal & anniversary, Corporate, Fishing).
  3. Activate your license (section 5.8). Without it, the fleet, finder, calculator and price table still work; the booking builder shows a WhatsApp button to visitors and an explanation to administrators.

4. Quick start (10 minutes)

  1. Settings → General: currency (AED by default), symbol position, then click Create a booking page for me.
  2. Settings → Booking flow: your WhatsApp number in international format (digits only, e.g. 971500000000) and the notification e-mail.
  3. Fleet → Add boat: title, description, featured image, then the Charter details, Pricing, Availability, Gallery and Booking status boxes. Tick the occasions the boat suits.
  4. Extras → Add extra: e.g. Birthday cake – 150 – per booking; Jet ski – 250 – per hour – max quantity 3; Dinner – 150 – per guest.
  5. Add the Yacht Finder block (or [ziyb_finder]) to your home or fleet page.

5. Configuration, screen by screen

5.1 Fleet (boat editor)

  • Charter details: type (yacht, catamaran, speed boat, houseboat, self-drive, fishing boat), length (ft), capacity, cabins, crew (captain & crew / self-drive), inclusions (one per line), departure marina(s), badges (Most popular, Party pick, Sunset favourite, Family friendly, New, Best value) plus one custom badge.
  • Pricing: price per hour, optional weekend price per hour, minimum and maximum hours, and price rules. A rule has a label, from / to dates (either can be empty), optional weekdays and a price per hour. The first matching rule wins; otherwise the weekend price applies on weekend days; otherwise the hourly price.
  • Availability: buffer between charters (empty = global setting), blackout dates (YYYY-MM-DD or YYYY-MM-DD..YYYY-MM-DD, one per line), links to the boat's calendar and iCal feed.
  • Gallery: choose several images; they appear as a swipeable strip on the boat page.
  • Booking status: Available, Fully booked (card stays visible with a badge, booking disabled, "Other dates" WhatsApp button), Hidden (removed from the website).

The single boat page automatically gets the gallery, badges, specs, the price calculator and – if no booking page is selected – the booking builder with the boat preselected. Turn this off with add_filter( 'ziyb_single_auto_content', '__return_false' );.

5.2 Extras

Price, unit (per booking, per hour, per guest), maximum quantity (1 = on/off), emoji icon or featured image, the boats it is available on (none = all) and the occasions it is suggested for. The excerpt is the short description.

5.3 Occasions

Yacht Booking → Occasions. Each occasion has a name, description and emoji icon. Boats and extras assigned to the chosen occasion are listed first with a "Suggested" tag. "Just cruising" is always offered.

5.4 Bookings

  • Status tabs with counts, filters (boat, date range, search on reference / name / phone / e-mail), sorting by charter date or received date, pagination.
  • Bulk actions: mark as any status or delete.
  • Export CSV exports the current filter (UTF-8 with BOM for Excel; cells that start with =, +, -, @ are escaped).
  • Booking detail: full summary, customer with a one-click WhatsApp link, WooCommerce order link, status (with optional customer e-mail), reschedule (boat, date, start, hours – checked against other bookings and the buffer), total / paid amounts, internal note, delete.

5.5 Calendar

Month grid (respects Settings → General → Week starts on). Filter by boat to see that boat's blackout days striped. Each booking chip links to the booking; the "+" on a day opens Add booking prefilled. With a boat selected, the iCal export button gives the subscription URL.

5.6 Add booking

For phone / walk-in / WhatsApp bookings. Minimum notice and blackout dates are not applied, but the double-booking guard (including the buffer) is. Choose the status and whether to e-mail the customer.

5.7 Settings

Tab Options
General Currency code, symbol, symbol position, decimals, fleet URL slug, booking page (+ one-click creation).
Schedule Start time every 15/30/60 min, whole or half hours, first and last departure (a last departure earlier than the first means after midnight), buffer, minimum notice, booking horizon, weekend days, global blackout dates.
Booking flow Request or WooCommerce, WhatsApp number, notification e-mail, which e-mails to send, require e-mail, pending-request hold time, auto-complete, reference prefix, booking terms text + URL, rate limit.
Payments & instalments Deposit or full payment, deposit %, instalment text on/off, number of instalments, provider names (e.g. tabby, tamara), show on cards.
Appearance Accent, text on accent, card background, text colour, corner radius, Yacht Finder group sizes and budget steps.
Advanced Schema.org on/off, names in iCal feeds, delete data on uninstall, shortcode reference.

5.8 License

Paste the key from your engzaki.pro purchase e-mail and click Activate. The page shows status, product, domain, expiry, updates-until date and last check. Deactivate on this site frees the activation so you can move the key. Local / staging hosts (localhost, *.local, *.test) validate without using an activation. The result is cached for 12 hours; if engzaki.pro cannot be reached, a previously valid license keeps working for a 7-day grace period.

6. Shortcodes and blocks

Shortcode Block Attributes
[ziyb_fleet] Yacht fleet type="yacht,catamaran", occasion="birthday", ids="12,15", limit="6", columns="1-4", finder="yes", title=""
[ziyb_finder] Yacht Finder same as fleet + groups="4,8,15,20", budgets="500,1000,2500"
[ziyb_calculator boat="ID"] Boat price calculator boat (defaults to the current boat page)
[ziyb_booking] Booking builder boat="ID", occasion="slug", title=""
[ziyb_price_table] Charter price table type=""

Links can preselect the builder: /book/?boat=123&occasion=birthday&hours=3.

7. How it works

Prices

total = hourly rate × hours + extras, where the hourly rate comes from the first matching price rule, else the weekend price on weekend days, else the base price. Per-hour extras multiply by hours × quantity, per-guest extras by guests. The browser shows the total live; the server recomputes everything on submit and stores the breakdown with the booking. Instalment = total ÷ count, rounded up to the currency's decimals.

Availability and the double-booking guard

Start times are generated between the first and last departure every time step. For each start the API returns the longest charter that fits before the next booking (minus the buffer). Every active booking (pending, confirmed, paid, completed) owns one row per 15-minute block of charter + buffer in {prefix}ziyb_locks, whose primary key is (boat_id, slot). An overlapping booking needs a row that already exists, so MySQL rejects the insert and the customer is asked to choose another time. Cancelling deletes the rows; re-activating a cancelled booking re-claims them (or fails if the time was taken).

Booking flow

  1. The builder fetches a fresh nonce (pages can be cached) and posts to POST /wp-json/ziyb/v1/book (honeypot, minimum fill time, per-IP rate limit, terms check).
  2. The booking is stored as pending with a reference like ZY-261009-K7Q2.
  3. Request mode: the customer sees the reference and a Confirm on WhatsApp button with a prefilled summary; customer and admin get e-mails. Requests not confirmed within the hold time are cancelled automatically.
  4. WooCommerce mode: an order with one line (deposit or full amount) and the booking meta is created and the customer goes to the order-pay page. Order processing/completed → booking paid (full) or confirmed (deposit) with the paid amount; cancelled/refunded → booking cancelled and time released. Unpaid orders are cancelled after the hold time.
  5. Confirmed / paid bookings become completed after the charter ends (optional).

REST API

  • GET /wp-json/ziyb/v1/slots?boat=ID&date=YYYY-MM-DD
  • GET /wp-json/ziyb/v1/nonce
  • POST /wp-json/ziyb/v1/book

Hooks (selection)

Filters: ziyb_is_licensed, ziyb_capability, ziyb_bookings_capability, ziyb_boat_types, ziyb_badges, ziyb_boat, ziyb_quote, ziyb_booking_summary, ziyb_whatsapp_text, ziyb_email_html, ziyb_schema_product, ziyb_single_auto_content, ziyb_update_url, ziyb_license_api_url. Actions: ziyb_booking_created, ziyb_booking_status_changed, ziyb_booking_rescheduled, ziyb_license_changed, ziyb_loaded.

Theming

All colours and the radius are CSS variables: --ziyb-accent, --ziyb-on-accent, --ziyb-surface, --ziyb-text, --ziyb-radius. The layout uses logical properties, so Arabic / RTL sites need nothing extra.

Data

Tables: {prefix}ziyb_bookings, {prefix}ziyb_locks. Options: ziyb_settings, ziyb_license_state, ziyb_version, ziyb_db_version. Boats, extras and occasions are normal WordPress content. Uninstalling removes tables and options only when Settings → Advanced → Delete all bookings and settings is ticked; boats, extras and occasions are never deleted.

8. Privacy

Customer name, phone, e-mail, notes and a salted hash of the IP address are stored in your database. iCal feeds leave names and phones out unless you enable them. Add the booking data to your privacy policy; the plugin does not send anything to third parties except the WhatsApp links the visitor clicks and the license check to engzaki.pro (key + domain only).

9. Troubleshooting

Problem Fix
Boat pages show 404 Settings → Permalinks → Save (flushes rewrite rules).
"No start times left" on every date Check first / last departure, minimum notice, the boat's maximum hours (must be ≥ minimum) and that the boat is Available.
Builder shows only a WhatsApp button The license is not active – Yacht Booking → License.
Customers do not receive e-mails Install an SMTP plugin; WordPress' default mail is often blocked by hosts.
WooCommerce mode still sends requests WooCommerce must be active; the currency code in Settings must match the store currency.
"Your session expired" on submit A security plugin or CDN is blocking /wp-json/ziyb/v1/nonce; allow it and exclude it from caching.
Times look shifted Set Settings → General → Timezone to a city (e.g. Dubai), not a UTC offset.

10. FAQ

Can I take only a deposit? Yes – WooCommerce mode with Deposit and a percentage. The rest is recorded as the balance on the booking.

Can a boat have different prices on holidays? Yes – add a price rule with the date range (and optional weekdays).

Can I block a boat for maintenance? Add blackout dates on the boat, or create a manual booking for the exact hours.

Can I translate it? English and Arabic ship with the plugin; use Loco Translate for others (text domain zi-yacht-booking).

Will an update overwrite my changes? Settings, boats and bookings are stored in the database and survive updates. Do not edit plugin files; use CSS variables and hooks.

11. Changelog

1.0.0 – First release.

Changelog

= 1.0.0 =
* First release.

FAQ

+Can two guests book the same boat at the same time?

No. Every booking claims its hours plus the buffer in a table with a unique key per boat and 15-minute block, so the database itself rejects any overlap.

+Do I need WooCommerce?

No. The default flow sends the guest to WhatsApp with a prefilled summary and a booking reference. WooCommerce is only needed for online deposits or full payments.

+Does it take tabby or tamara payments?

The plugin shows the instalment text. To take instalment payments you need the provider's WooCommerce gateway and a merchant account; guests can then choose it on the payment page.

+Can I charge more at weekends or on holidays?

Yes. Each boat has an optional weekend price and any number of rules by date range and weekday, such as New Year's Eve or summer Fridays.

+What happens to requests that are never confirmed?

Pending requests are cancelled after the hold time you set (24 hours by default) and the slot opens again. Set it to 0 to keep them until you handle them.

+Does it work with my theme and page cache?

Yes. It uses its own scoped CSS with variables for your colours, and availability and booking requests go through the REST API, which is never cached.

+Is it ready for Arabic websites?

Yes. The layout is right-to-left aware and an Arabic translation is included. Other languages can be added with Loco Translate.

+What does the license unlock?

The fleet, Yacht Finder, calculator and price table work without a license. The license enables the booking builder, online booking flows and one-click updates.

Support

Every purchase includes support from the developer. If something does not work as described, send us your license key and site address and we will help you get it running.