{"id":362349,"date":"2026-09-09T21:05:44","date_gmt":"2026-09-09T21:05:44","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/tripvance\/"},"modified":"2026-09-21T20:53:07","modified_gmt":"2026-09-21T20:53:07","slug":"tripvance","status":"publish","type":"plugin","link":"https:\/\/tr.wordpress.org\/plugins\/tripvance\/","author":23555200,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.42.1","stable_tag":"1.42.1","tested":"7.1.1","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-09-21 20:53:07","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/profiles.wordpress.org\/abourri\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":258,"num_ratings":0,"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}},"upgrade_notice":{"1.42.1":"<p>Take this first if Activity pages look unstyled: the stylesheet could be silently not printed, and its panels lost their appearance when a second file was missing. Both fixed. The hero no longer starts under a fixed header, and the page is retuned for phones. No Tour or data changes.<\/p>","1.42.0":"<p>The Activity page, rebuilt around its reading column: a full-width hero, one glance strip, and the meeting point, cancellation and questions moved out of the booking rail. The gallery opens in a viewer. Tours can be converted into draft Activities without retyping. No Tour output changes.<\/p>","1.41.0":"<p>A tour editor pass. The status card printed the raw booking mode and answered from the last save; both are fixed, and it now follows the form as you type. Completion counts the six things a tour genuinely needs. No stored value, meta key or front-end output changes.<\/p>","1.40.2":"<p>A styling pass over the itinerary. The thread now runs to the last moment of the last day instead of stopping short, and descriptions are set at a reading size: justified on a wide screen, ragged on a phone. No markup, colour, stored value or behaviour changes.<\/p>","1.40.1":"<p>A migration fix, and the reason to take this first if you are on 1.40.0. Activation recorded the itinerary migration as finished before it had started, so some sites kept their itineraries in the old text field. Those sites are picked up and finished automatically.<\/p>","1.40.0":"<p>The itinerary is written on cards: add a day, type a title and a description. Existing tours move across automatically on the first admin page load, and the old wptm_itinerary field is kept untouched as the backup. Nothing on the front of the site changes.<\/p>","1.39.0":"<p>An editor release. A day or a stop is added as an editable card straight away, the completeness meter answers as you type, and Activities now use the same editor as Tours. Nothing on the front of the site changes and no meta key moves.<\/p>","1.38.0":"<p>A stability release. No feature or stored value changes. Underneath: less loaded on a front-end request, a rate limiter that counts correctly under concurrent submissions, a new System Status screen, and a test suite behind the booking engine.<\/p>","1.37.0":"<p>Finishes what 1.36.0 started. A tour is drawn day by day only when it says it lasts more than one day, so day trips are no longer announced as DAY 01, DAY 02. The itinerary is now one thread down the page. No stored value changes.<\/p>","1.36.0":"<p>Day trips stop being announced as a run of days. A one-day itinerary reads as a timeline of times and stops on every layout, including Luxury. Nothing is converted or deleted, and an Itinerary format setting covers the tours the rule gets wrong.<\/p>","1.35.2":"<p>A stability release. Nothing about how tours are stored has changed, and tours written by any earlier version open, save and render exactly as they did. Recommended before updating anything else.<\/p>"},"ratings":[],"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"],"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>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>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>Eleven tour page designs, chosen per tour or site wide, on one shared foundation: 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 schema on tour pages. Those belong to an SEO plugin, and two sources for one signal is worse than one. When the optional Rank Math rating integration is enabled, Tripvance can enrich Rank Math's existing tour schema with genuine approved review data.<\/p>\n\n<p>The homepage is the one exception, and it can be switched off in Tripvance &gt; Site pages &gt; Homepage. An SEO plugin can only describe what it can read, and the homepage is assembled by Tripvance after that plugin has already decided what the page is: the questions and answers, the licence number, the featured tours and the site search are all on the page and none of them reach the graph. So Tripvance describes them itself, in the language each visitor is reading -- inLanguage, this language's tour links, this language's site root -- and describes nothing the page does not show.<\/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. 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. 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 site's consent integration allows it; 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. The WordPress Consent API is supported when a consent manager configures opt-in mode. 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. Tripvance does not provide a cookie banner.<\/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>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=\"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>Turn on reviews under Tripvance \u2192 Settings and let travellers leave rated reviews. Tripvance does not print a separate schema graph; with Rank Math active it can add the average rating and latest approved reviews to the schema Rank Math already builds for the tour. To make a tour eligible for product review rich results, set Rank Math \u2192 Titles &amp; Meta \u2192 Post Types \u2192 Tours \u2192 Schema Type to Product. Google ultimately decides whether a rich result is shown, and nothing is added until real approved reviews exist.<\/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=\"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 schema on tour pages, leaving those to Rank Math, Yoast or whichever you use. The homepage graph is the single exception; if your SEO plugin already publishes the same thing, untick it in Tripvance &gt; Site pages &gt; Homepage.<\/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=\"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>1.42.1<\/h4>\n\n<p>Why Activity pages could render unstyled, and the Activity page on a phone. Nothing on a tour page changes, no meta key moves, and every activity, price, gallery and booking is where it was.<\/p>\n\n<ul>\n<li>The Activity stylesheet reaches the page. It was enqueued with two other handles named as dependencies, and WordPress prints nothing at all \u2014 with no notice and nothing in the log \u2014 when a named dependency is not registered. One handle removed by another plugin and the page shipped its full markup with no stylesheet. Both handles are now registered at the point of use and a handle that still cannot be found is dropped rather than allowed to take the page's stylesheet down with it.<\/li>\n<li>The page no longer depends on a second file for its appearance. Every panel, card, cell rule and tinted block on it is drawn with custom properties declared in tokens.css, and a custom property with no value invalidates the whole declaration that reads it \u2014 so losing that one file left At a glance with no box, Highlights with no card and the panels with square corners, which is the page looking unstyled. activity.css now carries its own floor for those values, at zero specificity, so tokens.css, the site accent and the unified brand all still win when they are there.<\/li>\n<li>Assets are versioned by the file actually served. The version string stamped the readable source while the browser was given the .min built from it, so rebuilding the .min without touching its source changed the bytes at an address that had not changed and every cache kept the old copy. A .min that is empty or a tenth the size of its source \u2014 an interrupted build \u2014 is no longer served at all.<\/li>\n<li>The Activity hero starts below the theme's header. A fixed header is painted over the top of the banner, and on a phone the breadcrumbs and part of the line above the title were underneath it. The overlap is measured from whatever is actually fixed or sticky at the top of the window, including the admin bar, so no theme's height is written into the stylesheet and a theme whose header scrolls away is unchanged.<\/li>\n<li>The Activity page on a phone. One step tighter on the spacing scale the whole page is set with, reading type at phone proportions, At a glance as compact cells with no empty one at the end of a short row, the gallery two across instead of twelve full-width frames, the meeting point stacked so an address is not four lines of two words, and the running order's clock column at the width of its badge rather than a tour's.<\/li>\n<li>What to bring, Important information and the questions are headed like the rest of the page. They are drawn by the tour page's section templates, whose title sets no colour, so they inherited the body grey and stood beside navy headings at a different size over a shorter accent rule.<\/li>\n<li>The mobile price bar cannot clip or cover. Its height is derived from its own parts and the safe area, and the page reserves exactly that much; the price never wraps or is cut, and a long button label ends in an ellipsis instead of past the card's edge. The button's label also stopped being given the icon's line-height \u2014 an old first-child selector that matched the label on the one button with no icon.<\/li>\n<\/ul>\n\n<h4>1.42.0<\/h4>\n\n<p>The Activity page and a way out of a tour that should have been an activity. Nothing on a tour page changes, no meta key moves, and every tour, activity, price, itinerary and booking is where it was.<\/p>\n\n<ul>\n<li>The Activity hero is full width. The band reaches both edges of the screen while its words stay in the same column as the reading below them, and it sits against the site header instead of under a band of white. The photograph keeps its own proportions rather than being stretched to the height of the text beside it.<\/li>\n<li>The booking rail holds the booking card and nothing else. Meeting point, cancellation, important information and the questions were being drawn in a three-hundred-and-seventy pixel column beside the form; they are sections of the reading column now, at its full width, each drawn once. The card follows the reader on a wide screen and stacks normally on a phone.<\/li>\n<li>One spacing scale for the page. Six different margins between sections became three custom properties, and a section heading now sits closer to what it introduces than to the section above it.<\/li>\n<li>At a glance carries every fact, including when the activity runs, which had a card of its own. The strip wraps into counted columns instead of forcing every fact onto one row, so labels are read at their proper size rather than shrunk to fit.<\/li>\n<li>The gallery opens. \"View photos\" and every thumbnail open a viewer with the full-size picture, a counter, previous and next, Escape, arrow keys and a backdrop that closes it; the page behind does not scroll and focus returns where it was. Without JavaScript each frame is still a link to its own picture.<\/li>\n<li>Tour to Activity conversion. An unpublished tour can be copied into a new draft activity from the tours list or the Publish box: title, content, excerpt, featured image, gallery, destination and place terms, and every commercial and experience field that both post types share. The tour is never modified and no media is duplicated.<\/li>\n<li>The itinerary is converted rather than copied. A tour keeps its stops as days and an activity keeps them as moments of one occasion, so a copied row arrived as an empty schedule. Stops are now read through the itinerary layer's own reader \u2014 structured, legacy text, or both \u2014 and written as schedule rows in order, with their times, titles, descriptions, locations and photographs. Anything with no field of its own is carried into the description rather than dropped, and whatever cannot be mapped is named in a notice on the new activity.<\/li>\n<li>Description and answer paragraphs are justified and set at a reading measure, ragged on a narrow column, inheriting the theme's own type.<\/li>\n<\/ul>\n\n<h4>Earlier releases<\/h4>\n\n<p>In brief below. The full notes for every release, including these, are in\nchangelog.txt, which ships with the plugin.<\/p>\n\n<ul>\n<li><strong>1.41.0<\/strong> \u2014 The tour editor answers as you type: a live status card that says the booking mode in words, completion counted on the six things a tour needs, and field search that reaches the itinerary.<\/li>\n<li><strong>1.40.2<\/strong> \u2014 A styling pass over the itinerary: the thread runs to the last moment of the last day, and the descriptions are set at a reading size.<\/li>\n<li><strong>1.40.1<\/strong> \u2014 A migration fix. Activation recorded the itinerary migration as finished before it had started; stranded sites are picked up automatically.<\/li>\n<li><strong>1.40.0<\/strong> \u2014 The itinerary is written on cards. Existing tours move across automatically, and the old wptm_itinerary field is kept as the backup.<\/li>\n<li><strong>1.39.0<\/strong> \u2014 An editor release: days and stops appear as editable cards straight away, and Activities use the same editor as Tours.<\/li>\n<li><strong>1.38.0<\/strong> \u2014 A stability release: less loaded on a front-end request, a correct rate limiter under load, a System Status screen and a test suite.<\/li>\n<li><strong>1.37.0<\/strong> \u2014 A tour is drawn day by day only when it says it lasts more than one day, so day trips are no longer announced as DAY 01, DAY 02.<\/li>\n<li><strong>1.36.0<\/strong> \u2014 Day trips stop being announced as a run of days: a one-day itinerary reads as a timeline of times and stops on every layout.<\/li>\n<li><strong>1.35.2<\/strong> \u2014 A stability release. Tours written by any earlier version open, save and render exactly as they did.<\/li>\n<\/ul>","raw_excerpt":"Tours, activities and travel experiences for WordPress: tour pages, itineraries and booking requests. No standalone schema graph; SEO-plugin friendly.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/362349","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=362349"}],"author":[{"embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/abourri"}],"wp:attachment":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=362349"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=362349"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=362349"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=362349"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=362349"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=362349"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}