{"id":362349,"date":"2026-09-09T21:05:44","date_gmt":"2026-09-09T21:05:44","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/tripvance\/"},"modified":"2026-10-19T19:09:03","modified_gmt":"2026-10-19T19:09:03","slug":"tripvance","status":"publish","type":"plugin","link":"https:\/\/mlt.wordpress.org\/plugins\/tripvance\/","author":23555200,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.10.1","stable_tag":"2.10.1","tested":"7.1.3","requires":"6.3","requires_php":"7.4","requires_plugins":null,"header_name":"Tripvance","header_author":"Med ABOURRI","header_description":"Tours, activities and travel experiences for WordPress: tour pages, itineraries and lightweight booking requests for travel agencies. Optional ACF support, multilingual and RTL ready, leaving canonical tags and meta descriptions to your SEO plugin.","assets_banners_color":"d8e0e4","last_updated":"2026-10-19 19:09:03","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/profiles.wordpress.org\/abourri\/","rating":5,"author_block_rating":0,"active_installs":0,"downloads":824,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.12.0":{"tag":"1.12.0","author":"abourri","date":"2026-09-12 17:33:35","revision":3692963},"1.35.2":{"tag":"1.35.2","author":"abourri","date":"2026-09-18 23:58:13","revision":3702872},"1.42.1":{"tag":"1.42.1","author":"abourri","date":"2026-09-21 20:53:07","revision":3706316},"1.8.11":{"tag":"1.8.11","author":"abourri","date":"2026-09-09 21:06:11","revision":3689001},"1.8.13":{"tag":"1.8.13","author":"abourri","date":"2026-09-10 19:35:17","revision":3690403},"2.0.1":{"tag":"2.0.1","author":"abourri","date":"2026-09-26 10:57:02","revision":3714133},"2.10.1":{"tag":"2.10.1","author":"abourri","date":"2026-10-19 19:09:03","revision":3755405},"2.5.0":{"tag":"2.5.0","author":"abourri","date":"2026-09-29 19:17:04","revision":3719694},"2.5.1":{"tag":"2.5.1","author":"abourri","date":"2026-09-30 10:42:24","revision":3720995},"2.8.10":{"tag":"2.8.10","author":"abourri","date":"2026-10-04 21:03:18","revision":3727814},"2.8.7":{"tag":"2.8.7","author":"abourri","date":"2026-10-03 10:17:45","revision":3726087},"2.9.0":{"tag":"2.9.0","author":"abourri","date":"2026-10-09 15:33:17","revision":3736984}},"upgrade_notice":{"2.10.1":"<p>4 cards per row; editable Luxury footer columns; Luxury directory pages and Morocco Trip Planner (search-ready), applied automatically. Compact cookie banner with a shorter default text; a calmer Bookings list. Luxury page starters removed; existing pages stay.<\/p>","2.10.0":"<p>Backups and restores now carry activities, transfers and vehicle profiles. A backup made by this version (format 2) needs 2.10.0 or later to restore.<\/p>","2.9.9":"<p>New: booking forms without a tour (shortcode, button design, printed booking slip) and a custom booking reference format. The Luxury footer can be hidden per page. The luxury demo makes no pages; its unpublished demo pages go to the Trash.<\/p>","2.9.8":"<p>New optional Marketplace tour card style (Settings \u2192 Tour card style). Homepage article pictures are no longer cropped (16:9 frames). Existing sites keep their card style; no data changes.<\/p>","2.9.7":"<p>The tour section bar (Highlights, Route, Description\u2026) now stays exactly under the theme&#039;s menu while the page scrolls, whatever the theme&#039;s header does on the way down: no more bar hidden behind the menu, and no more gap between the two. No data or setting changes.<\/p>","2.9.6":"<p>Activities and Transfers now show their names in Rank Math&#039;s Sitemap settings (they were listed with an empty label). No data, setting or address changes.<\/p>","2.9.5":"<p>The cookie banner now speaks the page&#039;s language (French, Spanish, Arabic, English; per-language wording with Polylang), adds Global Privacy Control and Google Consent Mode v2, and a corner button to change one&#039;s choice. No data migration.<\/p>","2.9.4":"<p>Security and stability release: safer Trip Builder requests on cached pages, rate limits that cannot be bypassed, formula-safe CSV exports and admin notices that cannot be spoofed. Settings now opens one group at a time. No data migration.<\/p>","2.9.3":"<p>Listing banners reach both edges of the window and sit against the theme&#039;s header; the list view&#039;s filters lose their frame; the card WhatsApp button moves beside &quot;View tour&quot;. No data or setting changes.<\/p>","2.9.2":"<p>New Experium colour palette (one choice in Settings &gt; Brand identity) and a new Panorama Slider homepage hero with up to ten photographs. The tour section bar and facts strip follow the theme&#039;s page colour; the homepage hero closes the gap under any theme header.<\/p>","2.9.1":"<p>New Settings &gt; Addresses &amp; SEO: shared or translated URL bases per language (Polylang Free), with live preview, 301 redirects and restore. Updating changes no existing URL.<\/p>","2.9.0":"<p>Transfers now include route stops, per-transfer FAQs, an updated page and photo viewer, improved archive cards, and three homepage layouts. Existing transfers, bookings, prices, URLs, and settings are preserved. The transfer archive remains opt-in.<\/p>","2.8.12":"<p>Builder saves (Homepage, page builder, car hire) can no longer leave the Save button spinning: every outcome ends within 30 seconds with the button back, the edits kept and a clear message. No data, setting, SEO or address changes.<\/p>","2.8.11":"<p>Tour pages follow the theme&#039;s content width (with a centred fallback when the theme gives none) and clear a fixed theme header; Site pages and the page builder buttons are aligned and steadier. No data, setting or address changes.<\/p>","2.8.10":"<p>Adds an optional Setup wizard (currency, tour and activity addresses, default design). Updating changes no address, price, currency, design or setting.<\/p>","2.8.9":"<p>Bookings dashboard, list and booking screen reworked (Quick view, quick filters, Needs attention, save report); site pages list and page builder fixes. No data migration.<\/p>","2.8.8":"<p>Booking screen: a summary from saved data, one suggested next action, panels grouped into five sections, and a warning before unsaved changes are lost. No data, price, status, message or document behaviour changes.<\/p>","2.8.7":"<p>Settings reorganised into one grouped navigation with a single Save button, plus fixes for a PHP warning in Settings, the System status layout and narrow-screen tables. No setting, data or booking behaviour changes.<\/p>","2.8.6":"<p>Visual and admin workflow polish only. No booking, pricing, database schema, stored data or customer-facing workflow changes.<\/p>","2.8.5":"<p>Prices per booking with documented revisions, a booking&#039;s own trip content, and PDF quotes, invoices and trip programmes kept as issued. Two new tables; existing bookings, prices, links and tokens are unchanged and nothing is repriced.<\/p>","2.8.3":"<p>Bookings, price snapshots and notifications are confirmed as stored before success is shown; an unconfirmed save is held and settled later; repeated requests and mail retries follow the real booking state; the Guest Pass map prefers the booking&#039;s location. No data change.<\/p>","2.8.2":"<p>Luxury enquiries confirm only stored requests and survive concurrent or interrupted submissions; the Guest Pass is clearer on screen and on paper. No data change.<\/p>","2.8.1":"<p>Stabilisation before 3.0: booking requests from cached pages stay separate per visitor, repeated submissions resolve to one booking, expired forms keep what was typed, and interrupted e-mails are flagged instead of stuck. No data migration; existing bookings, prices and layouts are unchanged.<\/p>","2.8.0":"<p>Curated tour layouts: Salma, Sara, Atlas, Sahara, Medina, Qamar and Classic, with Atlas styles and Sahara gallery variants. Older layout choices keep rendering as before; nothing needs re-saving.<\/p>","2.7.0":"<p>Tour display stabilization across layouts: consistent cards, Highlights, navigation, booking components and empty states. Existing Tours, bookings, pricing and Group Rates remain compatible; nothing needs re-saving.<\/p>","2.5.1":"<p>Hotfix for the Homepage FAQ section: equal card heights and no layout shifting when answers open. No data or settings changes.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3688981,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3688981,"resolution":"256x256","location":"assets","locale":"","width":1254,"height":1254}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3688981,"resolution":"1544x500","location":"assets","locale":"","width":2203,"height":714},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3689012,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"tripvance\/tours":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"tripvance\/tours","title":"Tours","category":"tripvance","icon":"location-alt","description":"Tour cards from your catalogue, as a grid or as the Moroccan Editorial Carousel, filtered by destination, type, category, duration or departure.","keywords":["tours","travel","booking"],"textdomain":"tripvance","editorScript":"wptm-sections-block","style":"wptm-card","supports":{"html":false,"align":["wide","full"]},"attributes":{"destination":{"type":"string","default":""},"type":{"type":"string","default":""},"category":{"type":"string","default":""},"duration":{"type":"string","default":""},"departure":{"type":"string","default":""},"ids":{"type":"string","default":""},"count":{"type":"number","default":6},"order":{"type":"string","default":"featured"},"columns":{"type":"number","default":3},"excerpt":{"type":"boolean","default":true},"heading":{"type":"string","default":"h3"},"selectionMode":{"type":"string","default":""},"layout":{"type":"string","default":"cards"},"eyebrow":{"type":"string","default":""},"title":{"type":"string","default":""},"highlight":{"type":"string","default":""},"subtitle":{"type":"string","default":""},"cta_label":{"type":"string","default":""},"cta_url":{"type":"string","default":""}},"editorStyle":"wptm-section-editor"}},"tagged_versions":["1.12.0","1.35.2","1.42.1","1.8.11","1.8.13","2.0.1","2.10.1","2.5.0","2.5.1","2.8.10","2.8.7","2.9.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3688981,"resolution":"1","location":"assets","locale":"","width":1440,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3688981,"resolution":"2","location":"assets","locale":"","width":1440,"height":890},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3688981,"resolution":"3","location":"assets","locale":"","width":1440,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3688981,"resolution":"4","location":"assets","locale":"","width":1440,"height":580},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3688981,"resolution":"5","location":"assets","locale":"","width":1440,"height":835},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3688981,"resolution":"6","location":"assets","locale":"","width":1440,"height":900},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3688981,"resolution":"7","location":"assets","locale":"","width":1440,"height":900}},"screenshots":{"1":"A tour page: gallery, rating, section navigation and the booking ticket.","2":"The booking ticket, with the two-step request form.","3":"The listing page with filters, sorting and tour cards.","4":"The route at a glance and the itinerary.","5":"The bookings dashboard in the admin."}},"plugin_section":[],"plugin_tags":[14615,269,125417,17227,249],"plugin_category":[39,40],"plugin_contributors":[278217],"plugin_business_model":[],"class_list":["post-362349","plugin","type-plugin","status-publish","hentry","plugin_tags-activities","plugin_tags-booking","plugin_tags-itinerary","plugin_tags-tours","plugin_tags-travel","plugin_category-business","plugin_category-calendar-and-events","plugin_contributors-abourri","plugin_committers-abourri"],"banners":{"banner":"https:\/\/ps.w.org\/tripvance\/assets\/banner-772x250.png?rev=3689012","banner_2x":"https:\/\/ps.w.org\/tripvance\/assets\/banner-1544x500.png?rev=3688981","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/tripvance\/assets\/icon-128x128.png?rev=3688981","icon_2x":"https:\/\/ps.w.org\/tripvance\/assets\/icon-256x256.png?rev=3688981","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/tripvance\/assets\/screenshot-1.png?rev=3688981","caption":"A tour page: gallery, rating, section navigation and the booking ticket."},{"src":"https:\/\/ps.w.org\/tripvance\/assets\/screenshot-2.png?rev=3688981","caption":"The booking ticket, with the two-step request form."},{"src":"https:\/\/ps.w.org\/tripvance\/assets\/screenshot-3.png?rev=3688981","caption":"The listing page with filters, sorting and tour cards."},{"src":"https:\/\/ps.w.org\/tripvance\/assets\/screenshot-4.png?rev=3688981","caption":"The route at a glance and the itinerary."},{"src":"https:\/\/ps.w.org\/tripvance\/assets\/screenshot-5.png?rev=3688981","caption":"The bookings dashboard in the admin."},{"src":"https:\/\/ps.w.org\/tripvance\/assets\/screenshot-6.png?rev=3688981","caption":""},{"src":"https:\/\/ps.w.org\/tripvance\/assets\/screenshot-7.png?rev=3688981","caption":""}],"raw_content":"<!--section=description-->\n<p>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.<\/p>\n\n<p><strong>Tours<\/strong><\/p>\n\n<p>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 \u2014 press Add a day, give it a title and a description \u2014 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.<\/p>\n\n<p><strong>Tour layouts<\/strong><\/p>\n\n<p>Seven layouts, each built for one kind of tour, all drawing the same content, prices and booking form: Salma (booking focused \u2014 gallery beside the two-step booking panel), Sara (marketplace product page with a price card that follows the reader), Atlas (multi-day \u2014 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.<\/p>\n\n<p>Tours are filed under destinations, tour types, departure points, trip lengths and categories, each with its own archive page and filters.<\/p>\n\n<p><strong>Two kinds of travel business<\/strong><\/p>\n\n<p>Tripvance ships two presentations of the same content, chosen under Settings \u2192 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 \u2014 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.<\/p>\n\n<p><strong>Booking requests<\/strong><\/p>\n\n<p>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.<\/p>\n\n<p>Requests are managed from a booking screen with a status workflow, internal notes and an operations dashboard.<\/p>\n\n<p><strong>Transfers<\/strong><\/p>\n\n<p>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.<\/p>\n\n<p>A transfer can also list the stops on the way (Marrakech \u2192 Tizi n'Tichka \u2192 Ait Ben Haddou \u2192 Ouarzazate), each with an optional description and stop time, drawn on the page as a route line \u2014 typed by the agency, never looked up or drawn on a map \u2014 and its own questions and answers, shown as an accordion. The transfer page leads with the route, the duration and the starting price, then the vehicles and the request form, then the practical information, the questions and the photographs (with a viewer). The optional transfer list at \/transfers\/ and the homepage Transfers section show transport cards (route, duration, capacity and \"from\" price); the homepage section offers three layouts: Classic Cards, Route Focus and Premium Transport.<\/p>\n\n<p>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.<\/p>\n\n<p>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.<\/p>\n\n<p><strong>Privacy &amp; Cookies<\/strong><\/p>\n\n<p>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.<\/p>\n\n<p><strong>Presentation<\/strong><\/p>\n\n<p>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 &gt; Tour listings).<\/p>\n\n<p>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.<\/p>\n\n<p>Listing pages with filters, sorting and cards; a Tours block and a <code>[wptm_tours]<\/code> shortcode for a grid of tours anywhere, and <code>[wptm_activities]<\/code> for a grid of activities \u2014 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 \u2014 the fleet, the services, the routes you cover and the prices you quote.<\/p>\n\n<p><strong>Multilingual<\/strong><\/p>\n\n<p>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.<\/p>\n\n<p>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 \u2014 the homepage, the car-hire page, the default inclusions \u2014 appears under Languages &gt; String translations so it can differ per language.<\/p>\n\n<p>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.<\/p>\n\n<p>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.<\/p>\n\n<p>An optional language switcher goes into the theme's own menus \u2014 desktop header, mobile menu, footer, or a shortcode wherever you like \u2014 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.<\/p>\n\n<p>Without Polylang the plugin runs unchanged.<\/p>\n\n<p><strong>Search engines<\/strong><\/p>\n\n<p>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.<\/p>\n\n<p>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.<\/p>\n\n<p>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 \u2014 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 &gt; Settings &gt; 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.<\/p>\n\n<p>It also emits clean semantic markup, keeps taxonomy archives crawlable, marks empty ones as noindex, and keeps them out of the sitemap.<\/p>\n\n<p><strong>Import<\/strong><\/p>\n\n<p>Existing WooCommerce products can be imported as tours, with a dry run first that reports exactly what would happen and creates nothing.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>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 <code>wp_mail()<\/code> and the mail provider configured by the site owner. Tripvance sends no telemetry to its developer and loads no remote fonts.<\/p>\n\n<p>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.<\/p>\n\n<p>Optional first-party campaign attribution uses the <code>wptm_attr<\/code> 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 &amp; Cookies when that module is switched on. Other integrations can supply the visitor's consent through the <code>wptm_attribution_consent<\/code> filter. Do not return true globally as a substitute for visitor consent.<\/p>\n\n<p>The optional Privacy &amp; Cookies module (off by default) stores the visitor's choice in one first-party cookie, <code>wptm_consent<\/code>, holding the accepted categories, the consent version and a timestamp.<\/p>\n\n<p>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).<\/p>\n\n<p>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.<\/p>\n\n<p>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.<\/p>\n\n<h3>Third-party libraries<\/h3>\n\n<ul>\n<li>TCPDF 6.11.4 by Nicola Asuni \u2014 https:\/\/tcpdf.org \u2014 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.<\/li>\n<li>DejaVu Sans fonts \u2014 Bitstream Vera and Arev fonts licence, public-domain changes (vendor\/tcpdf\/fonts\/DEJAVU-LICENSE.txt).<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>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.<\/p>\n\n<ul>\n<li>WhatsApp: contact buttons open <code>wa.me<\/code> after 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 .<\/li>\n<li>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 .<\/li>\n<li>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 .<\/li>\n<li>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.<\/li>\n<li>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 .<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install it through Plugins \u2192 Add New.<\/li>\n<li>Activate it. Tripvance prepares its required database tables, options and capabilities, but creates no tours, terms, pages or demo content automatically.<\/li>\n<li>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 \u2192 Settings.<\/li>\n<li>Go to Tripvance \u2192 Settings to choose the booking behaviour, contact details and tour-page design. Currency is set on each tour's pricing fields.<\/li>\n<li>Add a tour under Tours \u2192 Add New.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20travellers%20ask%20for%20a%20tailor-made%20trip%3F\"><h3>Can travellers ask for a tailor-made trip?<\/h3><\/dt>\n<dd><p>Yes. Tripvance \u2192 Tailor-Made Requests \u2192 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 <code>[tripvance_trip_builder]<\/code> 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.<\/p><\/dd>\n<dt id=\"is%20there%20a%20setup%20guide%3F\"><h3>Is there a setup guide?<\/h3><\/dt>\n<dd><p>Yes. After activation a dismissible welcome offers a step-by-step guide (Tripvance \u2192 Settings \u2192 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 \u2014 sample tours, activities and destinations, every item marked as demo \u2014 with a one-click removal that never touches your own content. The guide can be restarted from Tripvance \u2192 Settings.<\/p><\/dd>\n<dt id=\"is%20there%20a%20homepage%3F\"><h3>Is there a homepage?<\/h3><\/dt>\n<dd><p>Yes. Tripvance \u2192 Site pages \u2192 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.<\/p><\/dd>\n<dt id=\"is%20there%20a%20car%20hire%20page%3F\"><h3>Is there a car hire page?<\/h3><\/dt>\n<dd><p>Yes. Tours \u2192 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.<\/p><\/dd>\n<dt id=\"how%20do%20people%20ask%20for%20a%20quote%20on%20the%20car%20hire%20page%3F\"><h3>How do people ask for a quote on the car hire page?<\/h3><\/dt>\n<dd><p>Through the form plugin you already use. Paste its shortcode \u2014 Contact Form 7, WPForms, Forminator, whichever it is \u2014 into the Request form group on Tours \u2192 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 <code>#wptm-cars-request<\/code>, so a hero or call-to-action button can scroll straight to it.<\/p><\/dd>\n<dt id=\"does%20it%20create%20pages%20or%20content%20when%20i%20activate%20it%3F\"><h3>Does it create pages or content when I activate it?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20review%20stars%20in%20google%20search%20results%3F\"><h3>How do I get review stars in Google search results?<\/h3><\/dt>\n<dd><p>Tripvance cannot make stars appear; Google decides that. What it does is make a tour eligible: turn on reviews under Tripvance \u2192 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 \u2014 the same figures printed on the page \u2014 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.<\/p><\/dd>\n<dt id=\"is%20there%20an%20activities%20page%3F\"><h3>Is there an activities page?<\/h3><\/dt>\n<dd><p>Optionally. Activities are pages of their own from the start; the listing at <code>\/activities\/<\/code> and a page per activity type are switched on under Tripvance \u2192 Settings (activity archive). With it on, the plugin draws both \u2014 title, description, a row of type links, the activity cards with their prices, pagination \u2014 and a theme can replace either with <code>archive-wptm_activity.php<\/code> or <code>taxonomy-wptm_activity_type.php<\/code>. The <code>[wptm_activities]<\/code> shortcode and the Activities block put the same cards on any page.<\/p><\/dd>\n<dt id=\"my%20day%20trip%20shows%20day%2001%2C%20day%2002%E2%80%A6%20but%20it%20is%20one%20day\"><h3>My day trip shows DAY 01, DAY 02\u2026 but it is one day<\/h3><\/dt>\n<dd><p>On Automatic this should not happen: a tour is drawn day by day only when it says it lasts more than one day \u2014 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.<\/p><\/dd>\n<dt id=\"i%20set%20itinerary%20format%20by%20hand.%20will%20the%20plugin%20overrule%20me%3F\"><h3>I set Itinerary format by hand. Will the plugin overrule me?<\/h3><\/dt>\n<dd><p>No. Automatic only decides for tours that have not chosen, and a tour that has chosen keeps that choice whatever its duration says.<\/p><\/dd>\n<dt id=\"the%20stylesheets%20are%20minified.%20how%20do%20i%20read%20the%20source%3F\"><h3>The stylesheets are minified. How do I read the source?<\/h3><\/dt>\n<dd><p>The readable files sit beside the minified ones (<code>assets\/css\/tour.css<\/code> next to <code>tour.min.css<\/code>). Define <code>SCRIPT_DEBUG<\/code> as 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, run <code>npx --yes esbuild@0.25.9 assets\/css\/tour.css --minify --outfile=assets\/css\/tour.min.css<\/code> (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.<\/p><\/dd>\n<dt id=\"does%20this%20take%20payments%3F\"><h3>Does this take payments?<\/h3><\/dt>\n<dd><p>No. It records booking requests and the agency confirms them. No payment gateway is included and none is required.<\/p><\/dd>\n<dt id=\"can%20i%20send%20a%20quote%2C%20an%20invoice%20or%20a%20trip%20programme%20as%20a%20pdf%3F\"><h3>Can I send a quote, an invoice or a trip programme as a PDF?<\/h3><\/dt>\n<dd><p>Yes. Open a booking, set its price under Price &amp; 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.<\/p><\/dd>\n<dt id=\"is%20advanced%20custom%20fields%20required%3F\"><h3>Is Advanced Custom Fields required?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"will%20it%20conflict%20with%20my%20seo%20plugin%3F\"><h3>Will it conflict with my SEO plugin?<\/h3><\/dt>\n<dd><p>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 <code>wptm_product_schema_print<\/code> filter.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20polylang%3F\"><h3>Does it work with Polylang?<\/h3><\/dt>\n<dd><p>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 &gt; Site pages &gt; 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 &gt; String translations. A language switcher can be switched on in Settings and printed in the theme's menus or through <code>[wptm_language_switcher]<\/code>; each language links to the real translation of the current page and never to a guessed address. Without Polylang nothing changes.<\/p><\/dd>\n<dt id=\"how%20do%20i%20change%20the%20addresses%20%28urls%29%20of%20tours%2C%20activities%20and%20transfers%3F\"><h3>How do I change the addresses (URLs) of tours, activities and transfers?<\/h3><\/dt>\n<dd><p>In Tripvance &gt; Settings &gt; Addresses &amp; SEO. Two structures are offered. Shared slugs use one base for every language (\/tours\/, \/fr\/tours\/, \/es\/tours\/; the language folders are Polylang's). Translated slugs give each language its own base (\/tours\/, \/fr\/circuits\/, \/es\/tours\/; activities: activities, activites, actividades; transfers: transfers, transferts, traslados), with Polylang Free. Choosing Translated slugs fills these words in; they are suggestions you can change, and any other language starts from the English word rather than an invented one. Translating a base translates the address only: a French address shows the French translation of a tour where one exists.<\/p>\n\n<p>A new site with Polylang already active is offered translated slugs in the Setup wizard. An existing site keeps exactly the addresses it has, through the update and afterwards, including when Polylang or a new language is added later, until an administrator changes them here.<\/p>\n\n<p>The screen shows the addresses each word produces as you type. Save changes checks every word first and saves nothing if one is refused (an empty or reserved word, a language code, or two Tripvance routes at one address); the error is shown beside the field. Going back to an earlier word is always possible: it simply becomes the live address again. After a save the screen lists every route that moved and checks it against the rebuilt rules. Back up your site before changing published addresses.<\/p>\n\n<p>Every previous base keeps answering with one permanent (301) redirect to the same tour, activity, transfer, list or term in the same language, so links and indexed pages keep working; several successive changes still take one hop, and a word that becomes active again stops redirecting. Unknown addresses keep answering 404; nothing is sent to the homepage or to another language. No post slug, title, content, ID, language, booking or SEO field is changed, and the plugin builds canonical, hreflang and sitemap addresses through WordPress's own functions, so Rank Math, Yoast and Polylang publish the new ones. Search rankings can fluctuate while search engines process the change; check your sitemap and Google Search Console.<\/p>\n\n<p>Restore Previous URL Configuration puts the previous bases back, with the same preview and redirects; it cannot restore content, rankings or links on other sites. If Polylang is switched off, the site keeps its default language's addresses and returns to the per-language ones when it is switched on again.<\/p>\n\n<p>Supported: language folders (\/fr\/, with or without the default language's folder), WordPress in a subdirectory, structures with or without a trailing slash. Not supported for changes (the current addresses are kept and the screen says why): plain permalinks, Polylang languages by domain, subdomain or content, and bases set by code through the wptm_rewrite_slugs or wptm_language_slugs filters. Where Polylang Pro is active, its own Translate slugs module owns translated bases and Tripvance offers shared slugs only. Multisite works per site but has not been tested.<\/p><\/dd>\n<dt id=\"can%20i%20take%20booking%20requests%20for%20something%20that%20is%20not%20a%20tour%3F\"><h3>Can I take booking requests for something that is not a tour?<\/h3><\/dt>\n<dd><p>Yes. Tripvance \u2192 Bookings \u2192 Booking forms makes a booking request form with no tour page behind it \u2014 an airport pick-up, a private dinner, a day with a driver. Give it a name, optionally a price, the largest party and the notice you need, and place it on any page with <code>[tripvance_booking_form id=\"123\"]<\/code>: a button that opens the form in a window. Add <code>display=\"inline\"<\/code> to show the form in the page instead. The button's words, icon, style (solid, outline, soft), shape (rounded, pill, square), size, width, alignment and colour are set on the form with a live preview, and one placement can change any of them in the shortcode (<code>icon=\"calendar\" style=\"outline\"<\/code>\u2026). When a request is sent the traveller sees a booking slip print out of a small receipt printer: the reference, what was booked, the date, the party, the estimate and what happens next, with buttons to continue on WhatsApp, download the confirmation or print the slip.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20booking%20reference%20%28wpt-2026-001%29%3F\"><h3>Can I change the booking reference (WPT-2026-001)?<\/h3><\/dt>\n<dd><p>Yes, in Settings \u2192 Booking reference: your own letters and hyphens with {YYYY}, {YY}, {MM}, {DD} and {NUM}, and how many digits the number has \u2014 MTL-{YY}{MM}-{NUM} gives MTL-2610-0001. An example updates as you type. New requests use it; references already given keep theirs. The numbering starts again each year only when the year is part of the reference. Requests arrive in Bookings under the name you gave the form, with the same e-mails, statuses and documents as a tour booking.<\/p><\/dd>\n<dt id=\"can%20two%20people%20book%20the%20last%20seat%20at%20once%3F\"><h3>Can two people book the last seat at once?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.10.1<\/h4>\n\n<ul>\n<li>New: Settings \u2192 Cards per row \u2014 3 (as before) or 4. Applies to the homepage, the tour and activity listings, destination hubs, landing pages, the car-hire and transfer homepage grids and the shortcodes' default. Four only where the list is wide enough: a quarter of the row, never under 200px, so a narrow column shows three or two; cards in a row of four use slightly smaller type and padding.<\/li>\n<li>New: Settings \u2192 Footer link columns (Luxury Editorial). Add, remove, reorder and rename columns and their links, and choose the footer row each stands in. A page of the site can be linked as a path (\/about-us). \"Restore the default columns\" puts the defaults back.<\/li>\n<li>Changed: the Luxury footer's email, phone and WhatsApp now sit together in one Contact column, followed by Support (About us, Contact, FAQs) and Legal (Legal Notice, Privacy Policy, Cookie Policy). The top row gains Booking Information (Booking Terms and Conditions, Cancellation and Refund Policy), which takes the place of the footer menu; the menu shows again when no top-row column is set. Default wording is translated (French, Spanish, Arabic); your own wording prints as typed.<\/li>\n<li>Changed: the Destinations, Departure points, Tour types and Trip lengths pages are redesigned. Destinations and departure points: one card per place \u2014 photograph, number of tours, name, description \u2014 in three or four columns at the theme's wide width, two on a tablet, one on a phone. Tour types and trip lengths: a section per type with its description and \"View all\", then its tours as the site's own tour cards (a swipeable strip on phones). With Luxury Editorial the pages take its square frames and quieter type.<\/li>\n<li>Fixed: the Destinations page showed five places and a \"View all destinations\" card that led to a 404 when the destination index is off (the default). It now lists every destination unless that index is on.<\/li>\n<li>New: with Luxury Editorial on, Tripvance makes the Destinations, Tour types and Departure points pages if the site does not have them, and updates the ones it already has (Trip lengths too): each opens with the page title over the photograph of the place with the most tours, and ends with an invitation to plan a journey, on the full-width template. Runs once, on the first admin visit; only the [wptm_terms] shortcode on the page is changed, any text around it stays, and a page you delete afterwards is not made again.<\/li>\n<li>Changed: the cookie banner takes less room in all three layouts \u2014 smaller padding and buttons, Reject and Accept side by side at one size with Manage preferences beside or under them, and \"Continue without accepting\" on the title's line instead of a strip of its own. The default text is shorter in English, French, Spanish and Arabic; text you typed in the settings is kept.<\/li>\n<li>Changed: Luxury homepage, Our purpose (framed portrait): the photograph now stands on its own, without the outline behind it, the white border or the shadow. Everything else in the section is unchanged.<\/li>\n<li>Fixed: the destination and tour type index pages (\/tours\/destination\/, \/tours\/type\/) could show the code of an unrelated article \u2014 its styles printed as text \u2014 under the heading. They now open with one short line in the page language, count \"8 destinations\" rather than \"8 sections\", and show each place's photograph: the image set on the destination, or else the photograph of its newest tour. Sites are fixed by the update itself.<\/li>\n<li>Fixed: on multilingual sites (Polylang) the destination and tour type index pages now open in every language at their own address (\/fr\/tours\/destination\/ and so on) with the heading, counts and line in that language; before, only the default language worked, and one language could show the homepage instead. The language switcher and search engines are pointed at the right page in each language.<\/li>\n<li>Fixed: the Destinations, Departure points, Tour types and Trip lengths pages made in French, Spanish or Arabic took English titles and introductions on sites without a language pack. They are now made in their language, and pages made before keep any wording you changed while the rest is put into their language once, after the update.<\/li>\n<li>Fixed: on archive and listing pages, a few places read the page as the post with the same number \u2014 a page title, a homepage check, SEO fields. They now only ever read a real post.<\/li>\n<li>Improved for search engines: the index pages carry a description and a canonical address and are listed in the site's sitemap. With no SEO plugin, tours, activities and transfers get a meta description from their summary, destination and type pages from their description, and the tour archive and its destination and type pages a canonical address. With Rank Math or Yoast, their settings stay in charge.<\/li>\n<li>Changed: Bookings list \u2014 softer table with rounded corners, the guest's initials beside the name, and Today \/ Tomorrow \/ In 5 days under travel dates coming up in the next two weeks; on phones the status views scroll in one line and the filters pair up. The booking screen's section tabs are one bar and the header is shorter.<\/li>\n<li>New: with Luxury Editorial on, the Trip Builder (Plan your journey) takes the Luxury look: a deep ink opening with the title in serif capitals and the three promises as one tagline, a square paper form edged in terracotta, warm stone greys and sand, square fields and choices, small-capital labels and buttons. Sites already on Luxury get it with this update; nothing to switch on. The accent colour chosen in Tripvance settings still replaces terracotta.<\/li>\n<li>New: on Luxury Editorial the Trip Builder is the Morocco Trip Planner, written for search: the name as its heading (h1 on the full-width page) and in a new page's title and address, an introduction and a three-step \"How the trip planner works\" section under the form, and a title tag and meta description used wherever the page has none of its own in Rank Math, Yoast or the page settings. Its opening band is one flat colour, the Luxury footer's own, reaching both edges of the window and meeting the site's menu with no gap; the planner page moves to the full-width template once if it was on the theme's default one. A page still titled \"Plan Your Trip\" is renamed once; a published page keeps its address. Your own wording in the Trip Builder settings is always kept.<\/li>\n<li>Changed: the Morocco Trip Planner's opening shortens to its title once the traveller moves past the first question, and the section under the form steps aside, so every next step starts on the first screen; chosen answers take a terracotta frame on sand, picture choices darken gently, the summary reads like a travel notebook, and on phones the Previous\/Continue bar stays at the foot of the screen.<\/li>\n<li>Changed: the Luxury footer's hairlines run edge to edge. The \"Privacy\" link at the end of the copyright line is gone (Privacy Policy is in the Legal column); in its place, an optional small image \u2014 Settings \u2192 Footer badge \u2014 shown at 32px high (26px on phones), original file, so an animated GIF stays animated.<\/li>\n<li>Changed: in the Luxury footer the social addresses are no longer a column of links; they are a row of round line icons (Instagram, Facebook, YouTube, TikTok, X) under the paragraph about the agency.<\/li>\n<li>New: Settings \u2192 Brand mark (Luxury): a small emblem (SVG, PNG or GIF, original file) used as the marker of the steps under the Morocco Trip Planner, about 26px high; without one, a small diamond in the accent colour. The line above that section is gone.<\/li>\n<li>Removed: the six Luxury page starters (Inspirational journeys, One collection, Destinations, Our purpose, About us, Own in Morocco) from Tours \u2192 Pages. Pages already made from them are not touched, and the luxury sections stay available in the page builder.<\/li>\n<\/ul>\n\n<h4>2.10.0<\/h4>\n\n<ul>\n<li>New: Tours \u2192 Import and export backs up and restores activities, transfers and the vehicle profiles transfers are priced against, in the same file as tours. Vehicles are matched by their reference code, then their slug, so a transfer keeps its prices on another site.<\/li>\n<li>Fixed: a backup was refused on hosts whose file-type check reports JSON as plain text. The file's content is still checked before anything is read.<\/li>\n<li>Fixed: restoring a backup on another site no longer copies gallery IDs that point at the wrong photographs, and text containing a backslash keeps it.<\/li>\n<li>Fixed: the REST import endpoint failed because the export module it relies on was not loaded.<\/li>\n<li>Changed: the WooCommerce importer only appears when WooCommerce is active; restore has its own choice of what to do with items already on the site; the screen is laid out in three panels.<\/li>\n<\/ul>\n\n<h4>2.9.9<\/h4>\n\n<ul>\n<li>New: Booking forms (Tripvance \u2192 Bookings \u2192 Booking forms). A booking request form that needs no tour or activity: give it a name, optionally a price, the largest party and the notice needed, and place it with <code>[tripvance_booking_form id=\"\u2026\"]<\/code> \u2014 a button that opens the form in a window, or the form in the page with <code>display=\"inline\"<\/code>. Requests go through the same checks, e-mails and documents as a tour's and show in Bookings under the form's name; the visitor stays on the page the form was on.<\/li>\n<li>New: booking forms have a button design \u2014 icon and its side, style, shape, size, width, alignment and colour, previewed live on the form's screen and overridable per shortcode \u2014 and answer a request with a printed booking slip (sending \u2192 printing \u2192 received) that works on phones and desktops, right-to-left pages, night mode and reduced motion.<\/li>\n<li>New: Settings \u2192 Booking reference \u2014 choose the shape of booking references (letters, year, month, day, number, digits) instead of WPT-2026-001; the tour code on the booking ticket takes the same letters. Existing references are unchanged.<\/li>\n<li>Changed: the window showing the booking slip has no title bar, so the slip and its buttons need less scrolling; both windows close with the same plain cross, and the slip's buttons sit in two tidy rows (WhatsApp, then Download and Print).<\/li>\n<li>Performance: a booking form adds only its own small stylesheet to the head of the page it is on; the form's styles and scripts load deferred, and pages without a booking form load nothing new.<\/li>\n<li>New: \"Hide the Tripvance footer on this page\" \u2014 a box beside the editor and in the page builder's layout panel, shown while the Luxury footer is on. The theme's own footer is not affected.<\/li>\n<li>Changed: the Luxury sample content no longer creates the About Us, Our Purpose and Inspirational Journeys pages. On update, those pages are moved to the Trash if they are still unpublished drafts; a demo page you published is kept.<\/li>\n<\/ul>\n\n<h4>2.9.8<\/h4>\n\n<ul>\n<li>New: a third tour card style, Marketplace (Settings \u2192 Essentials \u2192 Tour card style), for browsing tours the way travel marketplaces present them: a square photograph with its own rounded corner and, under it on the page's colour, the place in a small grey tag, a large title, the rating (only when the tour has approved reviews), the duration and the price as one line (\"From \u20ac240 per person\"). The whole card stays one link to the tour. On phones the cards become a row you swipe. Boxed stays the default and Open is unchanged; existing sites look exactly as before until Marketplace is chosen.<\/li>\n<li>Fixed: the homepage Travel Guides section cut the sides (or top and bottom) off article pictures. Frames were 3:2, 4:3, 16:10 or 2:1 depending on the layout, and in Editorial and Panorama rows the frame also stretched to the height of the text beside it. Every layout now uses a 16:9 frame that keeps its shape, so a 1200\u00d7675 featured image shows in full; pictures in other shapes still fill the frame neatly.<\/li>\n<\/ul>\n\n<h4>2.9.7<\/h4>\n\n<ul>\n<li>Fixed: on themes whose header changes as the page scrolls, the tour's section bar either disappeared behind the menu (a header that becomes fixed only after scrolling was measured as nothing) or stuck with a gap under it through which the page showed (a header that drops its logo row was measured at its taller height). The header is now followed while the page scrolls and for a moment after, so the bar sits right under it at every point \u2014 including headers that slide away on the way down and back on the way up.<\/li>\n<li>Fixed: the booking column on tour pages and the list-view column on tour listings follow the same measurement, so they too stay under the menu.<\/li>\n<li>Fixed: a theme wrapper with overflow hidden could stop the section bar from sticking on one-column (phone) views; it is now repaired for the bar as it already was for the two-column booking panel.<\/li>\n<\/ul>\n\n<h4>2.9.6<\/h4>\n\n<ul>\n<li>Fixed: in Rank Math \u2192 Sitemap Settings the Activities and Transfers tabs had no name. Rank Math reads the names of the public post types once, early in WordPress's start-up, and keeps them; the two types were registered after that moment. They are now registered right after Tours, so Rank Math (and any SEO plugin that reads post types early) sees their names. Addresses, sitemaps and settings are unchanged.<\/li>\n<\/ul>\n\n<h4>Earlier versions<\/h4>\n\n<p>The full history, version by version, is in changelog.txt in the plugin folder.<\/p>","raw_excerpt":"Tours, activities and private transfers for WordPress: tour pages, itineraries and booking requests. SEO-plugin friendly.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mlt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/362349","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mlt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/mlt.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/mlt.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=362349"}],"author":[{"embeddable":true,"href":"https:\/\/mlt.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/abourri"}],"wp:attachment":[{"href":"https:\/\/mlt.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=362349"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/mlt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=362349"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/mlt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=362349"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/mlt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=362349"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/mlt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=362349"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/mlt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=362349"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}