Description
Tripvance brings tours, activities and travel experiences to WordPress: a Tours post type, tour pages built from real fields, and a booking request form. It is a request and confirmation system: the agency answers each request. There is no payment processing.
Tours
Each tour has a gallery, a short description, highlights, an itinerary, what is included and what is not, a meeting point, and questions and answers. The itinerary is written a card at a time — press Add a day, give it a title and a description — and comes out in two shapes, picking the right one by itself: a run of numbered days for a trip of several days, and a timeline of times and stops for a day trip. A section with no data is not rendered, so a page never shows an empty heading.
Tour layouts
Seven layouts, each built for one kind of tour, all drawing the same content, prices and booking form: Salma (booking focused — gallery beside the two-step booking panel), Sara (marketplace product page with a price card that follows the reader), Atlas (multi-day — the route and the days across the page with a day index), Sahara (photo-first, no sidebar), Medina (compact, for city tours and short activities), Qamar (premium storytelling for private and luxury journeys) and Classic (simple and theme-friendly). Atlas has two styles (Clean, Zellige) and Sahara three gallery presentations (Cinematic, Immersive, Mosaic). The site picks a default and each tour can choose its own. Legacy layouts from earlier versions remain supported for existing tours.
Tours are filed under destinations, tour types, departure points, trip lengths and categories, each with its own archive page and filters.
Two kinds of travel business
Tripvance ships two presentations of the same content, chosen under Settings Website experience. Standard is what the plugin has always been: a catalogue with prices, availability and a booking form, and it is the default on every site. Luxury Editorial redraws the same tours, destinations and activities as a travel magazine, for a bespoke travel designer who sells a journey by describing it rather than by pricing it — journey collections, editorial destination pages, a page design with no price card, and a short private enquiry in place of a checkout. Switching between them changes nothing you have written, and there is no second catalogue to keep in step.
Booking requests
The form asks for a date, a party size and how to reach the traveller. By default it behaves as an enquiry system. If you enable seat-capacity enforcement, seats are held atomically against the departure while a request is open, so two simultaneous requests cannot both take the last seat.
Requests are managed from a booking screen with a status workflow, internal notes and an operations dashboard.
Transfers
Private transfers (airport to hotel, city to city) are a post type of their own, at /transfers/{slug}/. Each transfer describes its route, pickup and drop-off, estimated duration, operating hours, minimum booking notice and practical information, and lists the Vehicle Types it offers with a price for each. Vehicle Types are reusable, customer-facing options (for example “Comfort minivan or similar”) with a class, capacity, luggage, features and a picture; they are not public pages. A round trip is priced as two journeys in the same Vehicle Type. There is no distance-based or automatic pricing.
The visitor chooses a Vehicle Type, a pickup date and time, passengers and luggage, and can add flight details. Capacity is checked in the browser and again on the server. The request becomes an ordinary booking record, with the same statuses, reservation ledger, messages, quotes and Guest Pass as a tour, and the price is stored with it when it arrives.
In Operations, the Fleet holds the physical vehicles. A fleet vehicle can be linked to a Vehicle Type, and assigning one to a transfer booking warns when it does not match the requested type and is refused when it cannot carry the passengers. Fleet is optional: transfers can be booked without it.
Privacy & Cookies
An optional consent banner (off by default) with Necessary, Analytics, Marketing and Preferences categories holds back the scripts you place in it until the visitor accepts their category. It helps collect and honour consent; it does not by itself make a site legally compliant.
Presentation
Tour cards can carry a strip of gallery thumbnails along the foot of their picture: pointing at one, or tapping it, shows that photo in the card, so a visitor looks through a tour without opening it (Settings > Tour listings).
Seven curated tour layouts, with style and gallery variants, chosen per tour or site wide, on one shared foundation (legacy layouts from earlier versions remain supported for existing tours): a sticky section navigation, a booking ticket beside the price, a route at a glance, an itinerary drawn as days or as a timeline, group rates, questions and answers, and reviews. The plugin inherits the theme’s typography and loads no fonts of its own.
Listing pages with filters, sorting and cards; a Tours block and a [wptm_tours] shortcode for a grid of tours anywhere, and [wptm_activities] for a grid of activities — each activity can carry its own price and take booking requests directly through the same request system as a tour; a homepage template assembled from your tours, destinations, activities and trust details; and a car hire template for the driving side of the business — the fleet, the services, the routes you cover and the prices you quote.
Multilingual
Tripvance uses the WordPress translation system throughout and is ready for community language packs from translate.wordpress.org. It also includes built-in French, Spanish and Arabic front-end fallbacks, with right-to-left layouts for Arabic.
Polylang is supported properly, not nominally. Tours, activities and every taxonomy the plugin owns are registered as translatable. Tours, terms and the pages the plugin generates are given their language and linked to their translations, so a language switcher lands on the right page. A generated page is written in its own language, not in the language of whoever pressed the button. Booking requests record the language the traveller was reading, and the confirmation, the voucher and the reminder are all written in it. Wording you type yourself — the homepage, the car-hire page, the default inclusions — appears under Languages > String translations so it can differ per language.
Addresses can be translated too, and are not by default. Switch on “Addresses per language” in the settings and a French page becomes /fr/circuits/ rather than /fr/tours/, with the destination, category, departure and trip length sections following it; the words come from the same translation catalogue. The addresses you already have keep working and redirect to the new ones. Leave it off and no address on the site changes, whatever language packs are installed.
A site that generated its pages before adding a language can put them right from the settings screen: each page’s title, starting wording and address go back into its own language, a page you have edited is left alone, and the previous address redirects.
An optional language switcher goes into the theme’s own menus — desktop header, mobile menu, footer, or a shortcode wherever you like — and each language links to the translation of the page the visitor is on: a French reader on an English tour lands on the French tour. Polylang decides which page that is and keeps printing the hreflang tags; Tripvance only draws the control, in the menu’s own typography, with no flags, no external assets and no second translation system.
Without Polylang the plugin runs unchanged.
Search engines
Tripvance prints no canonical tag, meta description or Open Graph markup, and no site-wide schema. Those belong to an SEO plugin, and two sources for one signal is worse than one.
Tripvance provides limited Product structured data for eligible Tour and Activity pages, including accurate pricing and genuine on-site review aggregates. When Rank Math is active, Tripvance integrates with its structured-data graph to avoid duplicate Product entities. General SEO and site-wide Schema remain under the control of the site’s SEO plugin.
In practice: a price is included only when it is the price the page shows and a traveller can book (one Offer at the public “From” price — the fixed price, or the lowest valid Group Rate; nothing for a tour on request), and a rating only from approved reviews of that tour, when the page shows the same average and count. Nothing is added to the homepage, archives, taxonomy pages, FAQs or private views such as booking confirmations and Guest Passes. The setting is under Tripvance > Settings > Search result product data. Structured data makes a page eligible for rich results; search engines decide whether prices or review stars are shown, and it does not affect ranking.
It also emits clean semantic markup, keeps taxonomy archives crawlable, marks empty ones as noindex, and keeps them out of the sitemap.
Import
Existing WooCommerce products can be imported as tours, with a dry run first that reports exactly what would happen and creates nothing.
Privacy
Booking requests and operational records are stored in the site’s database. These can include names, email and WhatsApp/telephone numbers, country, travel dates, party sizes, pickup details, messages, quotes and records of payments received outside the site. Transfer requests can also include a drop-off address, pickup and return times, luggage and flight details. Notifications use wp_mail() and the mail provider configured by the site owner. Tripvance sends no telemetry to its developer and loads no remote fonts.
WordPress personal-data export and erasure tools are supported for bookings matched by email, including bookings in the trash; transfer bookings are exported with their route, pickup, drop-off, return and flight details. Erasure removes identifying booking fields, campaign attribution, email queue/history and free-text history notes, clears linked reservation emails and pickup details, and revokes private links. Non-identifying booking, quote and payment records are retained. For requests without an email address, the operator must identify the relevant records manually. Backups and mail already delivered by the site’s mail provider are outside this eraser.
Optional first-party campaign attribution uses the wptm_attr cookie for up to 30 days. It stores UTM values, referral code, referring host (not the full referring URL), first tour visited and timestamp. It is read or written only when the visitor has consented to analytics; without consent it is disabled and an existing cookie is expired on the next uncached page request. Booking totals and manually entered attribution remain available. Consent is taken from the WordPress Consent API when a consent manager configures opt-in mode, otherwise from the Analytics choice in Tripvance Privacy & Cookies when that module is switched on. Other integrations can supply the visitor’s consent through the wptm_attribution_consent filter. Do not return true globally as a substitute for visitor consent.
The optional Privacy & Cookies module (off by default) stores the visitor’s choice in one first-party cookie, wptm_consent, holding the accepted categories, the consent version and a timestamp.
Tailor-made trip requests store the name, email address and, when given, telephone, country and message a traveller enters, with their travel preferences. Nothing is sent or stored while they move between the wizard’s steps; the request is saved once, when they press Send. Requests are private, excluded from search, feeds, REST and sitemaps, and are covered by the WordPress export and erasure tools (erasure keeps the reference, dates, length and party size).
Issued quotes, invoices and trip programmes are stored in the site’s database as frozen copies of what they printed (the customer’s name, the billing details an operator entered, the trip and the prices), together with the PDF file as issued. They are never written to the uploads folder, and a customer can download one only when the agency shared it, through their own Guest Pass or quote link. Erasure keeps issued invoices, which are accounting records, and removes the booking’s quote and programme documents.
Anti-abuse counters use salted hashes of the requesting IP address with expiring transients. The raw IP is not stored in those counters. Private Guest Pass, quote and voucher links act as access keys and should be shared only with the intended traveller.
Third-party libraries
- TCPDF 6.11.4 by Nicola Asuni — https://tcpdf.org — LGPL-3.0-or-later (vendor/tcpdf/LICENSE.TXT). Bundled to produce PDF documents on the site’s own server; trimmed to the engine and two fonts.
- DejaVu Sans fonts — Bitstream Vera and Arev fonts licence, public-domain changes (vendor/tcpdf/fonts/DEJAVU-LICENSE.txt).
External services
No external service is required for the core booking workflow. Site owners choose the optional links, media and mail service they use and should reflect them in their privacy notice.
- WhatsApp: contact buttons open
wa.meafter a click and may include a prepared message. No WhatsApp API or automatic WhatsApp messaging is included. Terms: https://www.whatsapp.com/legal/terms-of-service ; Privacy: https://www.whatsapp.com/legal/privacy-policy . - YouTube and Vimeo: an operator-supplied video URL can be embedded through WordPress oEmbed; WordPress may request embed metadata and the visitor’s browser connects to the video host when displayed. In the Luxury Editorial experience, a YouTube address pasted into the Video field of the hero or the full-bleed story is embedded directly from www.youtube-nocookie.com and plays on its own, silently, as the background of that one section; nothing is requested from any video host on a site that has not supplied such an address, no script is loaded from a third party at any point, and the embed is never created for a visitor whose browser asks for reduced motion or reports a slow or metered connection. YouTube terms: https://www.youtube.com/t/terms ; Google privacy: https://policies.google.com/privacy ; Vimeo terms: https://vimeo.com/terms ; Vimeo privacy: https://vimeo.com/privacy .
- Google Maps and Search: optional meeting-point and weather links open after a click and include the selected place, coordinates or weather query. Terms: https://policies.google.com/terms ; Privacy: https://policies.google.com/privacy .
- External media: if an operator enters a remote image or direct video URL, the browser requests that host when the media is displayed. Use the WordPress media library to serve these assets from the site itself.
- External payment links: an operator may provide a PayPal or another payment link. The link opens its provider after a click; Tripvance does not process the payment or receive card details. PayPal terms: https://www.paypal.com/legalhub/useragreement-full ; Privacy: https://www.paypal.com/legalhub/privacy-full .
Screenshots







Blocks
This plugin provides 1 block.
- Tours Tour cards from your catalogue, as a grid or as the Moroccan Editorial Carousel, filtered by destination, type, category, duration or departure.
Installation
- Upload the plugin folder to
/wp-content/plugins/, or install it through Plugins Add New. - Activate it. Tripvance prepares its required database tables, options and capabilities, but creates no tours, terms, pages or demo content automatically.
- A one-time notice offers a starter kit (tour types, durations, sample destinations, a Destinations page, a Tour Types page and two landing pages). Create it in one click, or dismiss the notice and build your own structure. The same buttons stay under Tripvance Settings.
- Go to Tripvance Settings to choose the booking behaviour, contact details and tour-page design. Currency is set on each tour’s pricing fields.
- Add a tour under Tours Add New.
FAQ
-
Can travellers ask for a tailor-made trip?
-
Yes. Tripvance Tailor-Made Requests Settings has a “Create Trip Builder Page” button, or lets you choose an existing page; nothing is created until you press it. The page shows a step-by-step wizard (dates, length, interests, destinations, travel style, accommodation, travellers, budget, contact) whose steps and answers you manage on the same screen. Requests are private records with a TMR reference, separate from bookings, and “Create Draft Tour” starts a draft tour from one. The
[tripvance_trip_builder]shortcode and the Trip Builder block place the wizard anywhere. An optional “Plan your own trip” call to action on tour pages is off by default. -
Is there a setup guide?
-
Yes. After activation a dismissible welcome offers a step-by-step guide (Tripvance Settings Setup guide): tours, homepage and its preset, tour design, booking. Every step reads your site as it is and only offers what is missing; nothing is created or changed without a button pressed for it. The guide also offers demo content — sample tours, activities and destinations, every item marked as demo — with a one-click removal that never touches your own content. The guide can be restarted from Tripvance Settings.
-
Is there a homepage?
-
Yes. Tripvance Site pages Homepage creates a page on the “Tripvance homepage” template and fills it from what the site already has. Its hero can be a classic image cover, a muted looping video with accessible playback and optional sound controls, a split featured-tour spotlight, layered floating image stories, or an animated travel-colour mesh. The same buttons, optional reassurance points and five tour-search designs adapt to every hero; search can be hidden entirely. The rest includes featured tours, destinations and tour types with their counts, a signature tour, activities, trust, “why choose us”, articles and a final call to action. Sections can be switched off and reordered; a section with nothing to show is not printed. Setting the page as the site’s front page is a separate, explicit button.
-
Is there a car hire page?
-
Yes. Tours Car hire creates a page on the “Tripvance car hire page” template, built the same way as the homepage: sections you tick and order, a preset to arrange them, a preview before anything goes live. It holds a hero, a fleet with a filter by kind of vehicle, the services a driver is hired for, a table of routes with journey times and prices, your destinations and tours, the booking steps, trust details, a gallery, testimonials and questions. Only the vehicle’s name is required; a cell left empty prints nothing and a section with nothing in it is not printed at all. Publishing the page is a separate, explicit button, and it is a normal page, so you add it to your menu yourself.
-
How do people ask for a quote on the car hire page?
-
Through the form plugin you already use. Paste its shortcode — Contact Form 7, WPForms, Forminator, whichever it is — into the Request form group on Tours Car hire, and the form is printed in its own section, styled to match the page. Tripvance does not add a second enquiry system for cars: your form plugin already holds the fields, the address the mail goes to, the spam protection and the export, and duplicating that would only give you two places to check. Leave the shortcode empty and the section is not printed at all. The section answers to
#wptm-cars-request, so a hero or call-to-action button can scroll straight to it. -
Does it create pages or content when I activate it?
-
No. Activation only registers the post types and prepares the database. A notice then offers a starter kit, and nothing is created until you press the button. The starter kit’s sample destinations are Moroccan examples; rename or delete any of them.
-
How do I get review stars in Google search results?
-
Tripvance cannot make stars appear; Google decides that. What it does is make a tour eligible: turn on reviews under Tripvance Settings and let travellers leave rated reviews, and keep “Search result product data” switched on. Once the tour has approved rated reviews, their average and count — the same figures printed on the page — are added to the tour’s Product data. With Rank Math active they go into the Product Rank Math already builds for the tour, or into one Product added to Rank Math’s graph if it has none: Tripvance does not add a second Product when Rank Math already provides one for the current Tour or Activity. Ratings can be left out separately with “Include the average rating from approved reviews”; a site that had switched the earlier rating option off keeps it off. Ratings from other websites are never included, and activity pages, which do not display reviews, carry no rating.
-
Is there an activities page?
-
Optionally. Activities are pages of their own from the start; the listing at
/activities/and a page per activity type are switched on under Tripvance Settings (activity archive). With it on, the plugin draws both — title, description, a row of type links, the activity cards with their prices, pagination — and a theme can replace either witharchive-wptm_activity.phportaxonomy-wptm_activity_type.php. The[wptm_activities]shortcode and the Activities block put the same cards on any page. -
My day trip shows DAY 01, DAY 02… but it is one day
-
On Automatic this should not happen: a tour is drawn day by day only when it says it lasts more than one day — more than one day, at least one night, a multi-day duration preset, or an overnight written on one of its days. Check those four first, because one of them is what is claiming the days. Otherwise set Itinerary format to “Single day / Timeline” on that tour and the choice is final. Fill in the Time field at the top of each stop’s card if you have one and it leads the stop on the page; a stop with no time still reads perfectly by its title.
-
I set Itinerary format by hand. Will the plugin overrule me?
-
No. Automatic only decides for tours that have not chosen, and a tour that has chosen keeps that choice whatever its duration says.
-
The stylesheets are minified. How do I read the source?
-
The readable files sit beside the minified ones (
assets/css/tour.cssnext totour.min.css). DefineSCRIPT_DEBUGas true in wp-config.php and the readable files are served instead, as WordPress does for its own. The minified copies are built with esbuild 0.25.9. To rebuild a file, runnpx --yes esbuild@0.25.9 assets/css/tour.css --minify --outfile=assets/css/tour.min.css(use the corresponding paths for other CSS or JavaScript files); until then the edited file is served as it is, because a minified copy older than its source is never used. -
Does this take payments?
-
No. It records booking requests and the agency confirms them. No payment gateway is included and none is required.
-
Can I send a quote, an invoice or a trip programme as a PDF?
-
Yes. Open a booking, set its price under Price & services if needed, and use the Documents panel: Preview gives a draft without a number, Issue gives the numbered document and keeps an unchangeable copy. PDFs are produced on your own server. Tripvance prints the details you give it; check that your invoices carry what the rules where you trade require.
-
Is Advanced Custom Fields required?
-
No. The plugin has its own fields and works without it. If ACF is installed the same fields are shown through ACF instead. The free version is enough; no premium field type is used.
-
Will it conflict with my SEO plugin?
-
It should not. The plugin outputs no canonical, meta description or Open Graph markup and no site-wide schema, leaving those to Rank Math, Yoast or whichever you use. Its only structured data is one Product on eligible Tour and Activity pages; with Rank Math it is merged into Rank Math’s own graph, and with Rank Math the page builder no longer writes Rank Math’s title, description or focus keyword. If another SEO plugin already publishes a Product for your tours, switch off “Search result product data” or use the
wptm_product_schema_printfilter. -
Does it work with Polylang?
-
Yes, with the free version. Tours, activities, taxonomy terms and generated pages are assigned a language and linked to their translations, and each generated page is written in its own language. The homepage and the car hire page are created in every language at once and linked, so the language switcher and the hreflang tags are right from the start. The homepage’s own wording gets a language tab per language in Tripvance > Site pages > Homepage: the same form, the source text above every box, and a box left empty falls back to the source language rather than leaving a hole. Booking mails, vouchers and reminders answer in the language the traveller booked in. Your other wording is still exposed in Languages > String translations. A language switcher can be switched on in Settings and printed in the theme’s menus or through
[wptm_language_switcher]; each language links to the real translation of the current page and never to a guessed address. Without Polylang nothing changes. -
Can two people book the last seat at once?
-
If seat-capacity enforcement is enabled, no. Tripvance obtains a departure lock and performs the capacity test as part of the reservation write, so only one request can take the final seat. Capacity enforcement is off by default because many agencies use the form as an enquiry system.
Reviews
Contributors & Developers
“Tripvance” is open source software. The following people have contributed to this plugin.
Contributors“Tripvance” has been translated into 1 locale. Thank you to the translators for their contributions.
Translate “Tripvance” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
2.8.10
Guided setup. Nothing changes on an existing site by updating: no address, price, currency, design or setting is touched, and the wizard never opens by itself.
- New: Setup wizard under Tripvance Settings Setup wizard — four short steps (currency, addresses, design, review) with Back, Continue and a way out; choices are kept between steps and saved only by Apply settings, in one write, verified before success is shown.
- A new installation is greeted once with “Welcome to Tripvance” (Start setup / Later). It replaces the setup guide’s welcome notice; the guide itself stays under Settings.
- Currency: the currencies the settings already offer, with a price example in the plugin’s own format. Nothing is converted, and the default cannot be changed from the wizard while a tour, activity or transfer without its own currency, or a booking without a stored one, depends on it.
- Addresses: the tour and activity address words, with a preview on your domain. Editable only on a new site with no tours, activities, transfers, bookings, tour terms or menu links, with pretty permalinks and without per-language addresses; checked on the server against pages, other post types and taxonomies, existing rewrite rules, reserved words and language codes. Rewrite rules are rebuilt once after a valid change. Everywhere else they are shown read-only.
- Design: the default tour design and activity layout as cards with the plugin’s own miniatures; tours and activities with their own design keep it, and the review says how many follow the default.
- Fix: choosing a design in the setup guide on a site whose settings had never been saved switched the activities and other switches off.
- Addresses can be chosen only on a site recorded as a clean first installation at activation, and only until the setup is completed; updated, reactivated and emptied sites show them read-only. Custom addresses already saved are kept.
- The step indicator saves the open step like Back and Continue (also without JavaScript); a form from another or a duplicated tab no longer overwrites newer choices; a change made in Settings while the wizard is open is shown for review instead of being overwritten.
- The currency lock follows the price engine’s own reading (missing, empty or invalid codes) and the payment ledger’s (bookings with no snapshot, quote or revision).
- Fix: the Tripvance menu icon showed black until the page finished loading. It is now drawn by CSS in the admin colour scheme’s colours from the first paint.
- Setup wizard: every change to a draft (Back, Continue, the step indicator, Apply settings) is read, checked and saved under a short lock, so two tabs pressing at once cannot overwrite each other; viewing a step no longer rewrites the draft.
- Setup wizard: a booking counts as priced in the default currency when its price snapshot is missing, damaged or has an unreadable currency, unless an accepted quote or a revision with a valid currency takes precedence.
- Operations: a clearer header with the two manifest buttons, a wrapping “On this page” bar that scrolls inside itself on phones, calmer empty states, and trip rows showing customer, crew and payment state, as cards on phones. Nothing it lists or checks has changed.
2.8.9
Site pages and the page builder. No page is deleted, recreated, published, added to a menu or made the front page by this update; existing content, IDs, addresses, templates, translations and SEO fields are untouched.
- Tour and activity editor: the title stays above every section; Inclusions in three groups (highlights, included / not included side by side, what to bring) with eight suggestions and “Show all suggestions”; a suggestion already in the list is marked and never added twice. No data changes.
- Fix: pages made from a starter lost characters — quotes in block settings became “u0022” and backslashes disappeared — because the markup was not slashed for wp_insert_post(). SEO titles and descriptions with a backslash were cut the same way.
- Fix: with JavaScript on, every page builder, homepage and car hire save went to a wrong address and failed (“could not reach the server”); the form’s “action” field hid its address.
- Fix: an ordinary save no longer moves a page with its own template (a theme’s, a landing page’s) to the default one, and no longer reports a failure for a template the active theme does not list.
- New pages are written in the page’s language, with the language chosen first; destinations and tour types are found by search in that language, checked on the server, cleared when the language changes; a page for the same starter, term and language is pointed out; typed values survive a failed attempt; a double click makes one page.
- Site pages list: search, kind, language and status filters and real pagination over every managed page (homepage and car hire with all translations, index, landing and starter pages), last modified, Polylang translations, the right editor per kind, and “Add to Site pages” for other pages with Tripvance sections.
- Page builder: Content and Page settings & SEO tabs, section summaries, Duplicate, keyboard moves, real statuses (draft, pending, private, scheduled, published), “Save draft” versus “Update the published page”, save-then-publish, a non-blocking “Before publishing” check, and an optional visible page title.
- Starter FAQ answers and the call to action are now bracketed notes instead of promises about booking or payment.
- Site pages: Move to Trash from each page’s ⋮ menu, with a confirmation and Undo; the front page and the posts page are protected, and nothing is ever deleted permanently.
- Fix: the builders no longer show the plain form (Order boxes) for a moment before the builder appears; a loading state is shown instead, and a clear notice with the plain form if the builder cannot start.
- Builders: an optional name for each section (shown in the editor only), a short summary on each section card, a focal point picked on the photograph (stored in the existing Focal point field, also new for the standard hero), and Copy style / Paste style between sections.
- Fix: builder buttons sometimes did not respond — a click with a little mouse movement started a drag of the whole row, and buttons were re-created under the pointer after typing. Only the handle drags now, and the list no longer re-creates its buttons.
- Fix: after undoing a removal, two settings panels could show at once.
- Our purpose: commitment columns get equal width; the larger photograph option now sets the commitments as aligned rows beside a half-width photograph instead of squeezing them.
- Section builder for the homepage and site pages: a section library with search and drawings, drag or keyboard reordering, “Add a section here”, Content / Design / Spacing tabs, duplicate, hide, remove with undo, Undo/Redo, per-page design settings, starter layouts, templates, and JSON export/import. Unsaved homepages render exactly as before; the first save keeps a copy of the old settings.
- Custom HTML blocks are no longer limited to five, each with its own label and place; the old five slots keep their content, order, visibility and translations.
- Three call to action layouts (band, split with image, card) and per-section spacing and background.
- Homepage builder: grouped navigation in page order, find a section or setting, section summaries, keyboard moves, a preview that says which version it shows at true device widths, and the protected JSON save (it used to fall back to a plain POST).
- Our purpose: titles and sentences aligned across columns, and an optional larger photograph. Moroccan Editorial Carousel: the corner motif and the flourish are removed.
Bookings dashboard, bookings list and booking screen. No booking, price, payment, seat or status rule changes, and nothing is sent or changed by viewing or filtering.
- Dashboard: search, Add booking and a More actions menu; four figures — requests to answer, follow-ups due, trips today, trips tomorrow — each opening exactly the bookings it counts, in the site’s time zone; Needs attention; upcoming trips; the calendar; the week’s figures, sources and most requested trips folded away.
- Needs attention: stable reason keys and ranks (unconfirmed trip within a week, transfer without the driver or vehicle the agency keeps, payment claim to check, follow-up due, no reply, open balance before a trip), the most urgent first, one action that opens the right panel, further reasons behind a disclosure, and View all.
- Quick view from the list and the dashboard: a read-only side panel fetched per booking with a nonce and the capability on that booking; loading, failure and retry states; Escape, focus return and background scroll lock.
- Bookings list: Today, Tomorrow, Next 7 days, Follow-up due and Needs attention filters; tours, activities, transfers and custom trips; payment state (from the ledger’s index, now also refreshed when a customer reports a payment or accepts a quote); the applied filters with Reset; search by phone number however it is written; a payment tag distinct from the status; compact cards on phones; All bookings returns to the filtered list.
- Booking screen: Save changes, and after a save one report of what was saved and what was not, with a link to the panel to correct; changed fields are marked until saved; clearer action labels (Record payment, Issue PDF, Preview draft PDF, Save assignments, Mark as sent, Retry sending, Email the guest link, Create quote draft).
Earlier versions
The full history of every release is in changelog.txt, shipped with the plugin.
