Description
✈️ Yatra is the WordPress travel booking plugin built for tour operators, activity providers, travel agencies and adventure businesses that need real trip inventory — not a generic shop. The free version is a full booking office: trips, availability, checkout, customer records, transactional emails and a customer account area. Yatra Pro unlocks premium payment gateways plus a suite of 20 Pro modules you switch on as your business grows — from Channel Manager (Viator + GetYourGuide) to AI Assistant, White Label and WhatsApp Notifications.
Official site: 🌐 wpyatra.com · 📖 docs.wpyatra.com · 💳 Pricing · ✨ All features · 🎯 Live demo · 💬 Support forum
🎬 See Yatra in action
🎥 Watch the Yatra walkthrough on YouTube — trips, bookings, checkout, and traveler accounts in under five minutes. More tutorials on the MantraBrain YouTube channel.
✈️ Why tour operators pick Yatra
- 🗺️ Travel-first data model — Departures, capacity, traveler types and itineraries match how tours are actually sold, not how an e-commerce shop sells products.
- 🧭 One admin workspace — Modern Yatra dashboard inside wp-admin; less tab-hopping than bolting travel onto a generic commerce stack.
- ⚖️ Honest Free vs Pro — Core booking, CRM-style records, reviews and PayPal / Pay Later are in the free plugin. Card gateways and advanced modules are in Pro — no surprise paywalls on basics.
- 🔒 Your site, your data — Bookings and customer data stay in your WordPress database; payments go through the gateways you configure. No proxy, no markup, no per-booking fee.
- ⭐ 700+ active installs · ★ 4.6 / 5 on ww.wp.xz.cn — Active development since 2018, weekly updates.
🎁 What you get in the free Yatra plugin
Trips and catalog (11 free features)
- Trips & Itineraries — unlimited trips with rich descriptions, gallery, difficulty, duration, meeting points, included / excluded lists, day-by-day itinerary builder, per-trip FAQs and custom attributes
- Departures & Availability — scheduled departures, capacity, recurring availability rules
- Customer Accounts — booking history, payments, profile, and document access (invoices, vouchers, itineraries)
- Reviews & Ratings — moderation and trip-level display
- Sales Reports — admin reports for bookings, revenue, and trends
- Discounts & Coupons — sale and regular pricing, traveler-based pricing, coupon engine
- Enquiries Inbox — capture pre-booking questions per trip
- PDF Documents — generated invoices, vouchers, traveler itineraries
- Transactional Emails — booking confirmation, payment receipt, cancellation, reminder
Free payment gateways
- PayPal — cards, PayPal balance, Pay-in-4
- Pay Later — book now, confirm or pay offline (ideal for bank transfer, cash on arrival, invoice workflows)
Front-end + extensibility
- Templates for trip listings, single trip, booking flow, checkout, and account
- 4 Gutenberg blocks + 6 shortcodes to place trips, search, login and account on any page
- Compatible with most well-coded block themes, classic themes and major page builders
- PHP 7.4 or newer, structured codebase, hooks and filters, template overrides
- REST-oriented flows for booking and account experiences
💎 Yatra Pro — 20 modules across 3 tiers
Compare plans and buy Yatra Pro — three plans (Personal · Growth · Agency), each available yearly or lifetime.
Personal — $99/yr (sale, regular $149) · everything below included
- Dynamic Pricing — seasonality, demand, early bird, last-minute, inventory rules
- Flexible Payments — deposits and partial payments
- Scheduled Payments — instalment plans
- Advanced Discount — group-style discounts alongside coupons
- Additional Services — sell extras with the trip
- Email Automation — multi-step sequences, audience filters, per-send delivery logs
- Abandoned Booking Recovery — recover incomplete bookings
- Mailchimp Integration — sync travelers + bookings to lists
- Facebook Pixel — server-side + browser events
- Google Analytics 4 Enhanced — booking funnel + revenue events
- Google Calendar sync — departures and bookings into Google Calendar
- Custom Landing Pages — per-trip conversion-focused landing pages
- Dynamic Form Field — drag-and-drop custom booking questions
- Trip Consent — digital waivers and signatures
- Premium payment gateways: Stripe · Razorpay · Mollie · Paystack · Square · Authorize.Net · Bank Transfer
Growth — $199/yr (sale, regular $299) · everything in Personal, plus
- AI Assistant — generate itineraries, draft descriptions, suggest replies (bring your own OpenAI or Anthropic key)
- WhatsApp Notifications — booking confirmations, payment receipts and departure reminders over WhatsApp (Meta Cloud API)
Agency — $499/yr (sale, regular $699) · everything in Growth, plus
- Channel Manager — sell on Viator + GetYourGuide from one WordPress dashboard. Signed webhooks, anti-overbooking locks, real-time inventory sync.
- White Label — rebrand the admin, emails, PDFs and frontend. Full agency theming.
- Team & Access — granular roles + capability-based access for multi-staff agencies. 8 built-in roles, custom role builder, magic-link invitations, time-windowed access for contractors, scope filtering (per-destination / per-trip), append-only audit log. Defense-in-depth: every action gated on the server, UI mirrors via cap-aware controls.
- Webhooks — outbound HTTP delivery on booking / payment / customer events. HMAC-signed payloads, retry queue with exponential backoff, dead-letter queue, certificate pinning. Wire Yatra into Zapier, Make, n8n, or your own internal systems.
Lifetime plans also available: Personal $499 · Growth $999 · Agency $1,999 — pay once, own it forever.
See full plan comparison and pricing
🥊 How Yatra compares
Considering Yatra against a SaaS booking platform or another WordPress travel plugin? We’ve written honest, side-by-side comparisons against each major alternative:
- 🔄 Yatra vs Rezdy — Sell on Viator + GetYourGuide without the $99–$499 / month Rezdy SaaS bill. Lifetime license · GPL · your data, your gateway.
- 🔄 Yatra vs Bokun — Skip the per-OTA-booking fee Bokun charges (typically 2.5% per booking). Independent open-source alternative to Tripadvisor-owned Bokun.
- 🔄 Yatra vs WP Travel Engine — Same WordPress philosophy, modern architecture, broader Pro modules. Custom database tables for performance vs. WP Travel Engine’s custom post types.
Each page covers the feature matrix, pricing math, migration steps and FAQ — written without overpromising. Read the verdict, then try Yatra Pro free before you commit.
🌐 Native integrations
Yatra ships with bring-your-own-credential integrations — no proxy, no markup, no per-event fees. Full directory: All integrations on wpyatra.com.
- Payments: PayPal · Pay Later · Stripe · Razorpay · Mollie · Paystack · Square · Authorize.Net · Bank Transfer
- OTAs: Viator · GetYourGuide · Other OTAs (by request)
- Email & Messaging: Mailchimp · WhatsApp Cloud API
- Analytics & Marketing: Google Analytics 4 · Meta / Facebook Pixel
- Calendars & Scheduling: Google Calendar
- AI Providers: OpenAI · Anthropic Claude
- WordPress Ecosystem: Gutenberg blocks (4 native) · Elementor (via Shortcode) · WooCommerce (coexistence) · Loco Translate
🧩 Blocks and shortcodes
Use the block editor or classic shortcodes to drop catalog widgets, search and account UI into any page.
Blocks (search the inserter for “Yatra” or the block name):
- Trip — block name
yatra/tour(trip grid; the registered name staysyatra/tourfor backward compatibility, but the inserter title and UI now read Trip). Trip Settings (layout, Featured Priority — restrict to Featured, New, or Limited Time picked on the trip form’s Categorization Featured Priority) and Filters: each taxonomy (destinations, activities, trip categories, difficulty / fitness level) supports Listing scope — either All published (no ID filter saved) or Only selected, with search plus checkboxes to pick numeric classification IDs. - Activity —
yatra/activity: same taxonomy picker pattern (All published vs search + IDs) in the sidebar; matches[yatra_activity]ID rules. - Destination —
yatra/destination: same pattern; matches[yatra_destination]ID rules. - Trip categories —
yatra/trip-category(same card layout as destinations; links use your trip category base from Settings).
Shortcodes (all accept string values as in the plugin defaults — use yes / no or 0 / 1 where noted):
[yatra_trip]— Trip listing. Alias:[yatra_tour]. Filters:destination,activity,categoryaccept comma-separated classification IDs. Optional:order,featured_priority(featured/new/limited),per_page,difficulty,price_min,price_max,duration_min,duration_max,search,columns,show_pagination,title. Pagination:trip_page. Examples:[yatra_trip],[yatra_trip destination="44" activity="12"],[yatra_trip featured_priority="new" per_page="6"].[yatra_activity]— Activity listing cards.[yatra_destination]— Destination showcase.[yatra_trip_category]— Trip category cards.[yatra_search]— Advanced trip search form.[yatra_login]— Customer login form.[yatra_my_account]— Account dashboard for logged-in users.[yatra_discount_and_deals]— Discounted trips.
Empty-term filtering (hide_empty): [yatra_destination], [yatra_activity] and [yatra_trip_category] accept hide_empty="yes" to skip taxonomy terms that have zero published trips. Opt-in (default no).
Note: If you’re migrating from an older build, [yatra_cart], [yatra_checkout] and [yatra_mini_cart] are no longer registered — checkout and the booking flow now use Yatra’s own front-end routes and templates. See docs.wpyatra.com for full shortcode reference, URLs and page setup.
🎨 Compatible WordPress travel themes
Yatra works with most well-coded block themes, classic themes and major page builders. Recommended themes (optional — Yatra works with any theme):
- 🧳 Resa — the official Yatra travel theme — Lighthouse-fast, mobile-first, Gutenberg + WooCommerce ready, free on the ww.wp.xz.cn theme directory. Trip card grid, departure widgets, traveler-account dashboard all pre-styled for Yatra.
- 🧱 Blocksy — modern block theme
- ⚡ Kadence — fast, flexible theme
🔗 Quick links
- 🏠 wpyatra.com — official site
- 💳 Pricing — Personal · Growth · Agency · Lifetime plans
- ✨ All features — full Free + Pro capability list
- 🌐 Integrations — every native partner
- 🥊 Yatra vs alternatives — head-to-head comparisons
- 🎨 WordPress travel theme (Resa) — recommended pairing
- 📖 Documentation — installation, blocks, shortcodes, operations
- 🎯 Live demo — see Yatra on a real WordPress demo
- 🆘 Support / contact — help and commercial support routing
💙 Join the community
- ⭐ Rate Yatra five stars — helps other tour operators find the plugin
- 💬 Facebook community — connect with other Yatra users
- 📧 Email support — direct email for product questions
- 🐛 GitHub — issues & contributions — bug reports and pull requests
🚀 Try Yatra risk-free
- 🧪 Try the free Yatra plugin in WordPress Playground — spin up a temporary WordPress site with the free Yatra plugin pre-installed. No local setup, no signup, no credit card.
- 🎁 Try Yatra Pro free — full Pro trial environment with every module enabled. No credit card required.
- 💰 14-day refund on every paid Yatra Pro plan — see the pricing page for the refund window terms.
Additional Information
Privacy
Booking and customer data are stored in your WordPress database. Payment processing is performed by the gateways you enable; review each provider’s privacy and PCI documentation. Yatra does not ship customer data to an external SaaS.
Credits
Yatra is developed by MantraBrain. Third-party libraries include components such as React (admin UI), Vite, TanStack Query, and others as shipped in the plugin package.
Contributing
Issues and contributions: GitHub — Yatra
If Yatra helps your business, a ⭐ five-star review on ww.wp.xz.cn and considering 💎 Yatra Pro when you need paid features both help sustain development. Thank you for using Yatra.
Screenshots
Blocks
This plugin provides 4 blocks.
- Trip Display trip listings with customizable options
- Activity Display activity listings with customizable options
- Destination Display destination listings with customizable options
- Trip categories Display trip category cards with trip counts and pricing (same layout as destinations).
Installation
🛠️ Quick setup
- Install and activate Yatra from this screen or upload the ZIP under Plugins Add New Upload.
- Complete the setup wizard (currency, basics, permalinks as prompted).
- Add destinations and activities, then create your first trip under Yatra Trips.
- Configure PayPal and/or Pay Later under Yatra payment settings (free). Add Yatra Pro when you need card gateways or Pro modules.
- Place the booking experience on your site using Yatra templates, blocks, or shortcodes (see 🧩 Blocks and shortcodes in the description above and docs.wpyatra.com).
FAQ
-
What is the best WordPress travel booking plugin for tour operators?
-
Yatra is the WordPress travel booking plugin built around the operational reality of selling tours — scheduled departures, capacity, traveler categories, OTA distribution, dynamic pricing and deposit handling. The free plugin covers the entire booking lifecycle (trips, availability, customer accounts, reviews, reports, PDFs, transactional emails, PayPal + Pay Later); Yatra Pro adds 20 modules across Personal, Growth and Agency tiers. Read the head-to-head comparison vs WP Travel Engine or vs Rezdy SaaS.
-
Is Yatra free?
-
Yes. The plugin on ww.wp.xz.cn is free and includes the core booking stack for many tour operators. Yatra Pro is a paid upgrade for premium gateways and 20 Pro modules.
-
Do I need code skills to use Yatra?
-
No for day-to-day operation. Developers can override templates and use hooks for custom workflows.
-
Which payments are free vs Pro?
-
Free: PayPal and Pay Later. Pro: Stripe, Razorpay, Mollie, Paystack, Square, Authorize.Net, bank transfer (as supported for your account and region).
-
Can I take bookings without charging a card immediately?
-
Yes. Use Pay Later for offline confirmation, invoices, or pay-on-arrival flows.
-
Can I distribute my tours on Viator, GetYourGuide and other OTAs?
-
Yes — the Channel Manager module (Agency tier) connects Yatra directly to Viator and GetYourGuide via their official APIs. Signed webhooks pull bookings back in real time; anti-overbooking locks prevent two channels selling the same seat. Other OTAs (Klook, TripAdvisor Experiences, Booking.com Experiences, Airbnb Experiences) are available by request.
-
Does Yatra work with WooCommerce?
-
Yes. Yatra runs alongside WooCommerce on the same WordPress site — Yatra stores trips in its own custom tables while WooCommerce uses WordPress orders. Both coexist without data conflicts. Many operators use Yatra for tours and WooCommerce for merchandise or gift cards.
-
Does Yatra support multilingual and multi-currency travel sites?
-
Yes. Yatra ships translation-ready POT files and is compatible with WPML, Polylang and TranslatePress. Currency configuration is at the site level — set your default currency in Yatra Settings. RTL stylesheets ship in the bundled Resa WordPress travel theme.
-
Does Yatra work with my theme?
-
It works with most modern WordPress themes. Yatra ships front-end templates; your theme controls global layout and typography. For the smoothest pairing, see Resa — the dedicated Yatra travel theme by MantraBrain, free on ww.wp.xz.cn.
-
Are invoices and vouchers only in Pro?
-
Travelers can access invoices, vouchers and itineraries from the account area on the free plugin when your site is configured for it. Pro expands payment choices and business modules — it does not remove core documents by default.
-
How do saved trips / wishlist work?
-
Saved trips appear when Yatra Pro is active and wishlist is enabled in Yatra settings.
-
Is Yatra GDPR-friendly?
-
Use WordPress privacy tools together with Yatra: export or delete user-related data as required by your policy. Bookings and customer data live in your own WordPress database — Yatra does not ship data to an external SaaS. Payment data is handled by your chosen gateways under their terms.
-
Where is documentation?
-
See docs.wpyatra.com and wpyatra.com for features, Pro and updates.
-
Where are shortcodes and blocks documented?
-
See 🧩 Blocks and shortcodes in the description above. Full walkthroughs (pages, permalinks, checkout URLs) are in the documentation.
-
Does Yatra provide cart or checkout shortcodes?
-
No. Checkout and the booking flow run on Yatra’s own front-end routes and templates — drop them on any page via the plugin’s pretty permalinks (see the Permalink settings). Catalog, search, login and account still have shortcodes and blocks as listed in the description.
-
What does Yatra Pro cost?
-
Pricing starts at $99/yr (Personal, sale) and goes up to $499/yr (Agency, sale). Lifetime plans available from $499 one-time. Every Pro tier includes a 14-day refund window. See the full pricing breakdown.
Reviews
Contributors & Developers
“Yatra – Travel Booking & Tour Management” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Yatra – Travel Booking & Tour Management” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
3.0.5.1
- Hotfix — admin 403 on REST routes: site administrators on a free-only install were hitting
rest_forbiddenon Settings (and any other surface whose REST controller gates on a granularyatra_*cap). Root cause: theuser_has_capfilter installer (AdminServiceProvider::bootstrapMenuCapability()) was only called fromregisterAdminMenu()— hooked onadmin_menu, which doesn’t fire during REST requests. The admin SPA loads everything via REST, so the admin fallback that grantsyatra_*caps to users withmanage_optionsnever ran for those calls. Fix: the installer is now also invoked fromAppServiceProvider::register()(always-loaded core path), so the filters install for every entry point — admin pageviews, REST, AJAX, frontend, CLI. An idempotency guard prevents double-registration. Filter logic, priorities, and the team-module-disabled strip branch are unchanged — this is a registration-timing fix, not a semantics change. Pair with Yatra Pro 3.0.4 (Team & Access). - Safe to update from 3.0.5. No database changes, no settings reset.
3.0.5
- Capability registry foundation: the free plugin now ships a
user_has_capfilter at priority 7 (AdminServiceProvider::bootstrapMenuCapability()) that reads theyatra_team_role_enforcement_activefilter signal to decide whether non-adminyatra_*caps resolve normally or get stripped. When the Pro Team & Access module is enabled (or its “keep access on disable” setting is on), the signal returns true and caps resolve. When Pro is deactivated or the module is off without that opt-in, non-admin yatra_* caps are stripped so existing role assignments become inert — re-activating restores everything. WP administrators always pass via the admin fallback regardless. - Cap-string consistency sweep: every React page that gated UI on
manage_yatranow references the canonical registered cap (yatra_manage_settings,yatra_manage_emails,yatra_access_admin). New caps registered:yatra_view_reviews,yatra_edit_reviews,yatra_delete_reviews,yatra_manage_reviews. Inline cap checks insideTripController::restore_revisionandSingleTripControllerdraft-preview gainmanage_optionsfallback so site owners never fail. isWpAdminalways injected:AdminAssetsProvidernow always injectsisWpAdminandmanage_optionsintowindow.yatraAdmin.capabilities(was previously only set by the Pro Team module). Fixes the regression where Reviews + Email Templates didn’t load data for admins on free-only or Team-disabled installs. ReactusePermissions.can()gets a triple admin-fallback (isWpAdmin roles.administrator capabilities.manage_options) so admins always pass regardless of injection edge cases.- Customer + Availability controllers:
CustomerController::checkAdminPermission,AvailabilitySpecificDatesController::checkPermission, andAvailabilityRecurringRulesController::checkPermissionnow accept the registered Team caps (yatra_edit_customers,yatra_edit_trips) in addition to the legacymanage_optionsand pre-existing legacy caps (kept as OR-arms for back-compat with any hand-grant filter). - Transactional email types are now extensible:
TransactionalEmailTemplateService::typeToSettingsKeys()exposes theyatra_transactional_email_type_to_keysfilter so Pro modules can register their own type settings-keys mapping. Default subject/body lookups exposeyatra_transactional_email_default_subjectandyatra_transactional_email_default_bodyso modules can supply baseline copy. Powers the new Team module’s customizable invitation email surface. - Try Yatra Pro pill: subtle amber pill appears next to the page title on every admin page when the Pro plugin is NOT active. Links to
https://try.wpyatra.com/try-yatra-pro/(no credit card required). Hidden as soon as Pro is active. - UX polish:
SharedTableaction-menu dropdown shadow reduced fromshadow-2xltoshadow-md(matches the rest of the admin design); modal-body data loaders replaced with Skeleton blocks (Team page, MemberEditDrawer, RoleEditDrawer, AddMemberModal candidate picker); Departure save/cancel redirect now returns to the Departures page instead of the Trips page; Email page tabs (Delivery, Templates, Sequences, Logs) persist in the URL so direct links and reload work. - Reviews + Email registry:
Layout.tsxsidebar entry for Reviews now gates onyatra_view_reviews(wasyatra_view_trips);useEmailSettingsManagergates onyatra_manage_emails(was the unregisteredmanage_yatra). - Version: Yatra free 3.0.5. Pair with Yatra Pro 3.0.3 for the Team & Access module.
- Safe to update from 3.0.4.
- NEW — Discount Stacking setting: Settings Pricing tab with four modes (Both apply / Best for the customer / Discount only / Dynamic Pricing only). Only renders when both Advanced Discount and Dynamic Pricing modules are enabled. Default
bothpreserves legacy behaviour — zero change for existing sites unless an operator opts in. - NEW —
yatra_pricing_after_discount_stackfilter inCalculationServicelets premium modules rewrite the discount/DP combination per operator policy.pre_dp_base_amountships in the snapshot so listeners detect DP-active without re-running rules.calculateBaseAmount()andcalculateGroupDiscount()made public; newcomputeBaseAmountWithoutDynamicPricing()helper for the discount-only re-walk. - NEW — Channel Manager UI: searchable TripPicker on the New Mapping form (replaces the numeric Trip ID input); Mappings list shows trip name with link instead of
#42; All-channels filter + Add Mapping button stay on one row. - NEW — Module-page skeletons: Webhooks, Channel Manager, AI Assistant, WhatsApp, WhiteLabel, Team now render shape-aware skeletons (not bare spinners) on initial load. New
ModulePageSkeleton+ variants component. - Booking confirmation: Features tag row removed; featured-image always renders with a bundled placeholder fallback (no more lopsided text-only cards on trips without an image set).
- Booking sidebar consistency: per-category price (Adult × N) now always matches Trip Subtotal across JSON response, server-rendered HTML, and the React renderer — reconciled against CalculationService’s authoritative
category_prices_post_dpmap. - Stripe / AuthorizeNet / Square checkout fix: all three premium-gateway flows now forward
X-Yatra-Booking-Nonceon/booking/create, fixing theinvalid_nonce403 that blocked card payments. - Booking confirmation fatal fix:
BookingRepository::getResolvedBookingsTable()getTableName()(post-3.0.5 dangling refactor that crashed the confirmation page). - Booking-Form sub-tab gate: truthy check on
yatraAdmin.dynamicFormFieldEnabledso the sub-tab actually renders (wp_localize_script string-coercion bug —truearrives as"1", strict-equality silently failed). - Repo housekeeping:
BookingForm.tsx.backupremoved (71 KB orphan file).
3.0.4
- Unicode / Cyrillic slugs (end-to-end):
SlugHelper::generate()now rawurldecodes percent-encoded UTF-8 and usesmb_strtolowerwith a Unicode-aware regex (\pL\pN), so Cyrillic / CJK trip, destination, activity, and category slugs round-trip cleanly through validators and pretty-permalink routing.ActivityValidator,DestinationValidator, andTripValidatornow route raw user input throughSlugHelperinstead ofsanitize_title(which stripped non-ASCII characters down to a single dash).PrettyRouteMatcherdecodes captured slugs the same way before lookup, so a URL like/trip/токио/resolves correctly. - Pricing — single source of truth:
create_bookingnow usesCalculationService::calculateFromSessionas its primary path, so the sidebar pricing summary, the AJAX summary refresh, and the actual amount sent to the payment gateway are all driven by the same code. The calculation result exposesunit_price_before_dp,dp_total_adjustment,category_prices_post_dp, and adynamic_pricingbreakdown so templates can render a clean “Trip Pricing Services Itinerary Dynamic Pricing Discount” stack with no double-counting and no sidebar/payment drift. - Pricing summary — UI cleanup: services render as compact rows above Trip Subtotal (matching the traveler-row style instead of a separate card), Dynamic Pricing renders as one consolidated line (no “1 rule applied” caption), and service descriptions surface via a CSS
data-tooltiphover (no nativetitleattribute, no info-icon clutter). The duplicate-traveler bug (1 selected showing as 2) is fixed informDataToObject‘s handling ofname[]array notation. - Coupon UI persistence:
remove_couponnow writes back viayatra_set_booking_session()so the transient stays in sync, and the applied-coupon row’s visible state is server-rendered on first paint — the Remove button is now visible after a page refresh. - Session management:
yatra_set_booking_session()writes to both$_SESSIONand a transient keyed by abooking_tokenin the URL, andyatra_get_booking_session()falls back to the transient when REST endpoints arrive withoutPHPSESSID. Service toggles, summary refresh, coupon apply / remove, and create-booking all resolve the same cart regardless of how the request authenticated. - Mobile sticky bar: the sticky-bottom booking widget’s flatpickr / traveler-sync JavaScript is extracted into
assets/js/single-trip-sidebar.jsso it can no longer be mangled by WordPress’sconvert_charscontent filter (which previously rewrote&&operators inside inline scripts as&&and broke the bar on some themes). - FSE / block-theme support: new
Yatra\Core\Template\FseTemplates+Yatra\Core\Routing\PageContextprovide a proper handoff between page handlers and the renderer so single-trip, booking, account, and confirmation pages render correctly inside the FSE template canvas. - Custom trip tab: new
templates/partials/single-trip/content-custom.phplets an admin-defined “Custom” frontend tab render through the sameyatra_render_tab_icon()pipeline as the built-in tabs. - Pro toggle scaffolding: Settings Booking now has “Show available dates as a dropdown” with a PRO badge. The setting key (
date_picker_as_dropdown) and free-side filter contract (yatra_use_date_dropdown,yatra_single_trip_date_dropdown_options) live in the free plugin; the actual behavior (gate, option-builder, flexible-trip date synthesis) is contributed by the corresponding Yatra Pro module. - i18n / Loco Translate:
Bootstrap::loadTextDomain()now installs aload_script_translation_filefilter that falls back toWP_LANG_DIR/loco/plugins/for.jsonscript-translation files. This mirrors the existing.mofallback so React surfaces (account page, admin app, blocks) pick up Loco-managed translations from Loco’s standard private workspace. - CI / DevOps: the PHP-lint pipeline’s silent-failure bug (subshell counter in
find | while) is fixed;xargs -0 -P 4 php -lnow aggregates failures correctly. Addedconcurrency, least-privilegepermissions: contents: read, andtimeout-minutesto every job;composer validate --strictmoved beforecomposer install; debug noise and the inline AI-report preamble removed from$GITHUB_STEP_SUMMARY. - Safe to update from 3.0.3.
3.0.3
- Shortcodes:
[yatra_trip_category]— lists trip categories in the same card layout as destinations, with optional filters, pagination (trip_category_page), and AJAX-friendly behavior (seeTripCategoryShortcode+TripCategoryShortcodeAjax). - Shortcodes / blocks (
[yatra_trip], Trip block): Featured Priority filter (featured_priority=featured/new/limited; mirrors the trip form’s Categorization Featured Priority) and Difficulty / fitness-level filter (difficulty="3,5") are now first-class attributes. Legacyfeatured="1"is retained as a back-compat alias forfeatured_priority="featured"(featured_prioritywins if both are set). Centralised inTripListingFilterBuilderso the same rules apply to both shortcode and block inputs. - Trip block: retired the legacy Show only featured trips toggle in favor of the unified Featured Priority dropdown; existing block instances saved with
featured: trueare auto-migrated tofeatured_priority: "featured"when reopened in the editor. Inserter title and labels read Trip (registered block nameyatra/touris preserved for back-compat with saved posts). - Cards (Destination / Activity / Trip Category — shortcodes + blocks): the whole card is now a click target instead of just the title text. Implemented via the WAI-ARIA “stretched link” pattern (CSS pseudo-element on the existing title
<a>) so a single canonical link is exposed to screen readers and crawlers; keyboard focus shows a card-wide outline. - Enquiry emails:
{{trip_name}}(and other trip merge tags) now resolve correctly when an enquiry is submitted from a single-trip page. The modal poststrip_id/trip_slugreliably; backend normalizestripIdcasing and derivestrip_idfrom slug orHTTP_REFERERwhen missing;EnquiryServicenow eager-loads joined trip data before firingyatra_enquiry_createdso admin templates and Pro automation receive a complete object. Merge-tag regex now tolerates surrounding whitespace ({{ trip_name }}). - Payments admin (Add / Edit Payment): the Booking ID text field is replaced with a searchable booking picker that queries
GET /yatra/v1/bookings?search=…and matches against booking code (reference), customer name, and email — debounced server-side search with rich rows (code, customer, trip, email). The Payment Date field now uses the shared adminDatePickerfor visual parity with every other date field in the admin and prevents future-dated payments by default. - Upgrades: version-gated Free upgrade runner; legacy payment tokens table dropped when applicable (see
Upgrade_3_0_3). - Discounts: REST and repository hardening (writable column whitelist; safer updates).
- Single trip: group discount discoverability in the sidebar; Similar trips links respect plain permalinks via
yatra_get_trip_permalink(); enquiry modal Send Enquiry usesyatra-booking-buttonso primary color matches Check Availability and global--yatra-primarytokens. - Admin / i18n: Trip Builder meal plan strings use shared labels; attribute icon picker preserves Font Awesome
providerafter save; front-end Important Info shows translated meal plan labels (yatra_meal_plan_label()). - Safe to update from 3.0.2.x.
3.0.2.9
- Mobile booking bar: Improved sticky booking UI on small screens (date + travelers layout, full-width travelers dropdown opening upward, and reliable click targets).
- Admin caching: Fixed service cache invalidation so updates (including SEO fields) reflect immediately when cache is enabled.
- Safe to update from 3.0.2.8.
3.0.2.8
- Booking UI: Added Advanced settings to select Terms & Conditions and Privacy Policy pages; booking form now links to these pages (Privacy falls back to WordPress Settings Privacy when unset).
- Fix (Usage Tracking): Moved
StatsUsageintoapp/Servicesand updated references to avoid case-sensitive autoload issues on Linux hosts. - Fix (Gallery Modal): Hardened gallery modal image URL resolution against LiteSpeed Cache lazy-load placeholders.
- Safe to update from 3.0.2.7.
3.0.2.7
- Fix (Gallery Modal): Improved compatibility with LiteSpeed Cache lazy-load placeholders (base64
src) so the modal always opens the real image URLs. - Compat (LiteSpeed Cache): Excluded Yatra hero/gallery selectors from LiteSpeed lazy-load and excluded Yatra trip assets from optimisation where needed.
- Safe to update from 3.0.2.6.
3.0.2.6
- Fix: Composer autoload path was declared as
includes/Admin/(uppercase) but the directory on disk isincludes/admin/(lowercase); caused fatalincludewarnings on Linux/cPanel servers (case-sensitive filesystems). - License: Removed stub
LicenseControllerfrom the free plugin — all/yatra/v1/license/*routes are now registered exclusively by Yatra Pro’s own controller, eliminating any route conflicts. - Admin UI (Additional Services): Added missing Add New Service button via the
PageHeadercomponent on the Additional Services screen. - Safe to update from 3.0.2.5.
3.0.2.5
- Admin: add Review + Upgrade notices (React UI + WordPress notices) with smart dismiss scheduling.
- Setup wizard: save step settings when navigating between steps.
3.0.2.4
- REST: implemented
TripService::permanentDelete()soDELETE /yatra/v1/trips/{id}/permanent-deleteno longer fatals (fixes permanent delete from trash and bulk actions). - Admin (React): bulk trip actions rely on
BulkActionToolbarconfirmation only (removed duplicatewindow.confirm); improved bulk dialog copy formark_*actions. - Safe to update from 3.0.2.3.
3.0.2.3
- Admin (React): moved fullscreen shell CSS into the document head to reduce wp-admin chrome flicker; added HTML/CSS boot splash and
modulepreloadfor the admin bundle; primary sidebar navigation uses client-side URL updates so the PHP loading state does not repeat on every screen change. - REST: registered License routes in the API registry so
GET /yatra/v1/licenseworks on the free plugin (License screen and scripts that probe it). - Admin UI: hardened Departures and Availability trip dropdowns against TanStack Query cache shapes and
/tripslist payloads (fixesmap/finderrors when navigating without a full reload). - Safe to update from 3.0.2.2.
3.0.2.2
- Maintenance / patch release. Safe to update from 3.0.2.1.
3.0.2.1
- Readme (ww.wp.xz.cn): linked Pro gateways, modules, traveler features, and related mentions to wpyatra.com/pricing throughout the long description, FAQ, and quick links.
- Patch release; safe to update from 3.0.2.
3.0.2
- Readme (ww.wp.xz.cn): reorganized the long description — the Yatra Pro section now appears before Blocks and shortcodes for a clearer Free Pro integration flow.
- Documentation-only release for the plugin directory listing; no code changes required for existing 3.0.x sites.
3.0.1
- Maintenance release: updated ww.wp.xz.cn banner and directory assets (including screenshots) for the 3.x listing.
- Readme: shortened the plugin short description to meet ww.wp.xz.cn’s 150-character limit so imports are no longer truncated.
- Minor fixes and polish; see wpyatra.com for release notes.
3.0.0
- Major 3.0 release: redesigned admin experience, streamlined booking and traveler account flows, expanded gateway and module architecture for Pro, and ongoing hardening for production travel sites.
- See the plugin’s release notes and wpyatra.com for highlights. Always back up before upgrading from 2.x; follow migration guidance in documentation.
Earlier versions
- For 2.x changelog entries, see the plugin’s GitHub releases or historical notes on the vendor site.



