{"id":343294,"date":"2026-08-13T02:09:48","date_gmt":"2026-08-13T02:09:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/easy-shuttle-booking\/"},"modified":"2026-08-27T10:33:21","modified_gmt":"2026-08-27T10:33:21","slug":"magepeople-shuttle-booking","status":"publish","type":"plugin","link":"https:\/\/ta.wordpress.org\/plugins\/magepeople-shuttle-booking\/","author":15377419,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.0","stable_tag":"trunk","tested":"7.0.4","requires":"5.9","requires_php":"7.4","requires_plugins":null,"header_name":"MagePeople Shuttle Booking","header_author":"MagePeople Team","header_description":"A simple shuttle booking plugin for managing routes, schedules, and passenger reservations in WordPress.","assets_banners_color":"eff5fe","last_updated":"2026-08-27 10:33:21","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/magepeople-shuttle-booking","header_author_uri":"https:\/\/mage-people.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":104,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"magepeopleteam","date":"2026-08-13 02:09:35","revision":3644130}},"upgrade_notice":{"1.1.0":"<p>Adds dynamic passengers, route maps, searchable administration documentation, and booking-flow improvements.<\/p>","1.0.0":"<p>Initial release of MagePeople Shuttle Booking.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.jpeg":{"filename":"icon-128x128.jpeg","revision":3644130,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128}},"assets_banners":{"banner-772x250.jpeg":{"filename":"banner-772x250.jpeg","revision":3644130,"resolution":"772x250","location":"assets","locale":"","width":772,"height":308}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3668238,"resolution":"1","location":"assets","locale":"","width":1696,"height":1061},"screenshot-10.jpg":{"filename":"screenshot-10.jpg","revision":3668238,"resolution":"10","location":"assets","locale":"","width":1696,"height":1061},"screenshot-11.jpg":{"filename":"screenshot-11.jpg","revision":3668238,"resolution":"11","location":"assets","locale":"","width":1696,"height":1061},"screenshot-12.jpg":{"filename":"screenshot-12.jpg","revision":3668238,"resolution":"12","location":"assets","locale":"","width":1696,"height":1061},"screenshot-13.jpg":{"filename":"screenshot-13.jpg","revision":3668238,"resolution":"13","location":"assets","locale":"","width":1696,"height":1061},"screenshot-14.jpg":{"filename":"screenshot-14.jpg","revision":3668238,"resolution":"14","location":"assets","locale":"","width":1696,"height":1061},"screenshot-15.jpg":{"filename":"screenshot-15.jpg","revision":3668238,"resolution":"15","location":"assets","locale":"","width":1696,"height":1061},"screenshot-16.jpg":{"filename":"screenshot-16.jpg","revision":3668238,"resolution":"16","location":"assets","locale":"","width":1696,"height":1061},"screenshot-17.jpg":{"filename":"screenshot-17.jpg","revision":3668238,"resolution":"17","location":"assets","locale":"","width":1696,"height":1061},"screenshot-18.jpg":{"filename":"screenshot-18.jpg","revision":3668238,"resolution":"18","location":"assets","locale":"","width":1696,"height":1061},"screenshot-19.jpg":{"filename":"screenshot-19.jpg","revision":3668238,"resolution":"19","location":"assets","locale":"","width":1696,"height":1061},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3668238,"resolution":"2","location":"assets","locale":"","width":1696,"height":1061},"screenshot-20.jpg":{"filename":"screenshot-20.jpg","revision":3668238,"resolution":"20","location":"assets","locale":"","width":1696,"height":1061},"screenshot-21.jpg":{"filename":"screenshot-21.jpg","revision":3668238,"resolution":"21","location":"assets","locale":"","width":1696,"height":1061},"screenshot-22.jpg":{"filename":"screenshot-22.jpg","revision":3668238,"resolution":"22","location":"assets","locale":"","width":1696,"height":1061},"screenshot-23.jpg":{"filename":"screenshot-23.jpg","revision":3668238,"resolution":"23","location":"assets","locale":"","width":1696,"height":1061},"screenshot-24.jpg":{"filename":"screenshot-24.jpg","revision":3668238,"resolution":"24","location":"assets","locale":"","width":1696,"height":1061},"screenshot-25.jpg":{"filename":"screenshot-25.jpg","revision":3668238,"resolution":"25","location":"assets","locale":"","width":1696,"height":1061},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3668238,"resolution":"3","location":"assets","locale":"","width":1696,"height":1061},"screenshot-4.jpg":{"filename":"screenshot-4.jpg","revision":3668238,"resolution":"4","location":"assets","locale":"","width":1696,"height":1061},"screenshot-5.jpg":{"filename":"screenshot-5.jpg","revision":3668238,"resolution":"5","location":"assets","locale":"","width":1696,"height":1061},"screenshot-6.jpg":{"filename":"screenshot-6.jpg","revision":3668238,"resolution":"6","location":"assets","locale":"","width":1696,"height":1061},"screenshot-7.jpg":{"filename":"screenshot-7.jpg","revision":3668238,"resolution":"7","location":"assets","locale":"","width":1696,"height":1061},"screenshot-8.jpg":{"filename":"screenshot-8.jpg","revision":3668238,"resolution":"8","location":"assets","locale":"","width":1696,"height":1061},"screenshot-9.jpg":{"filename":"screenshot-9.jpg","revision":3668238,"resolution":"9","location":"assets","locale":"","width":1696,"height":1061}},"screenshots":{"1":"Shuttle search form \u2014 route, pickup point, date, time, and passenger selection.","2":"Trip review screen showing fare, seat availability, and the one-way\/round-trip toggle.","3":"Shuttle catalog grid rendered with the <code>[mpsb_shuttle_list]<\/code> shortcode.","4":"The 4-step shuttle editor \u2014 Basic Info, Route, Pricing, and Schedule.","5":"Stop-to-stop pricing matrix with automatic one-way\/return fallback.","6":"Shuttle bookings admin list with filters and inline status changes.","7":"Built-in environment status page."}},"plugin_section":[262246],"plugin_tags":[269,722,275439,24150,286],"plugin_category":[40,45],"plugin_contributors":[142531],"plugin_business_model":[],"class_list":["post-343294","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-booking","plugin_tags-reservation","plugin_tags-shuttle","plugin_tags-transportation","plugin_tags-woocommerce","plugin_category-calendar-and-events","plugin_category-ecommerce","plugin_contributors-magepeopleteam","plugin_committers-magepeopleteam"],"banners":{"banner":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/banner-772x250.jpeg?rev=3644130","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/icon-128x128.jpeg?rev=3644130","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-1.jpg?rev=3668238","caption":"Shuttle search form \u2014 route, pickup point, date, time, and passenger selection."},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-2.jpg?rev=3668238","caption":"Trip review screen showing fare, seat availability, and the one-way\/round-trip toggle."},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-3.jpg?rev=3668238","caption":"Shuttle catalog grid rendered with the <code>[mpsb_shuttle_list]<\/code> shortcode."},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-4.jpg?rev=3668238","caption":"The 4-step shuttle editor \u2014 Basic Info, Route, Pricing, and Schedule."},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-5.jpg?rev=3668238","caption":"Stop-to-stop pricing matrix with automatic one-way\/return fallback."},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-6.jpg?rev=3668238","caption":"Shuttle bookings admin list with filters and inline status changes."},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-7.jpg?rev=3668238","caption":"Built-in environment status page."},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-8.jpg?rev=3668238","caption":""},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-9.jpg?rev=3668238","caption":""},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-10.jpg?rev=3668238","caption":""},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-11.jpg?rev=3668238","caption":""},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-12.jpg?rev=3668238","caption":""},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-13.jpg?rev=3668238","caption":""},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-14.jpg?rev=3668238","caption":""},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-15.jpg?rev=3668238","caption":""},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-16.jpg?rev=3668238","caption":""},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-17.jpg?rev=3668238","caption":""},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-18.jpg?rev=3668238","caption":""},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-19.jpg?rev=3668238","caption":""},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-20.jpg?rev=3668238","caption":""},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-21.jpg?rev=3668238","caption":""},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-22.jpg?rev=3668238","caption":""},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-23.jpg?rev=3668238","caption":""},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-24.jpg?rev=3668238","caption":""},{"src":"https:\/\/ps.w.org\/magepeople-shuttle-booking\/assets\/screenshot-25.jpg?rev=3668238","caption":""}],"raw_content":"<!--section=description-->\n<p><strong>MagePeople Shuttle Booking<\/strong> turns any WordPress + WooCommerce site into a complete <strong>shuttle booking and transportation reservation system<\/strong>. Build multi-stop routes, set stop-to-stop pricing, publish departure schedules, and let customers book airport shuttles, hotel transfers, corporate shuttle rides, and scheduled shuttle services entirely online \u2014 with real WooCommerce checkout and real-time seat availability.<\/p>\n\n<p>Whether you run an airport shuttle service, a hotel transfer desk, a corporate\/employee transport program, a tour or resort transfer operation, or a city-to-city shuttle route, MagePeople Shuttle Booking gives you a route builder, a live pricing matrix, a schedule manager, and a WooCommerce-powered checkout \u2014 without touching a line of code.<\/p>\n\n<h4>Why choose MagePeople Shuttle Booking?<\/h4>\n\n<ul>\n<li><strong>Built on WooCommerce<\/strong> \u2013 no separate payment system to learn. Every shuttle booking is a real WooCommerce order, so you keep every gateway, tax rule, and reporting tool you already use.<\/li>\n<li><strong>True round-trip logic<\/strong> \u2013 set a turnaround time once and the plugin automatically calculates the return departure time from the forward journey's arrival, then adds a correctly-priced, correctly-directioned return leg to the cart when a customer books round trip.<\/li>\n<li><strong>Direction-aware seat availability<\/strong> \u2013 forward and return seat inventory are tracked independently, so a full outbound trip never blocks an available return trip on the same route.<\/li>\n<li><strong>Stop-to-stop pricing matrix<\/strong> \u2013 price every valid origin \u2192 destination combination on a route individually, with an automatic fallback to the one-way fare for the return direction so you don't have to fill in every field twice.<\/li>\n<li><strong>Guided route setup<\/strong> \u2013 add stops in order, set the time offset and distance from the first stop, and the plugin works out arrival times, drop-off options, and schedules for you.<\/li>\n<li><strong>One-click professional demo data<\/strong> \u2013 import or sync 30 ready-made U.S. services (ten Shared, ten Private, and ten Airport) with one-way and round-trip routes, four or five matches for every offered demo corridor, fares, discounts, schedules, Travel Pass plans, location badges, and local featured images.<\/li>\n<\/ul>\n\n<h4>Who is this for?<\/h4>\n\n<ul>\n<li>Airport shuttle and airport transfer operators<\/li>\n<li>Hotels and resorts offering guest shuttle\/transfer services<\/li>\n<li>Corporate and employee transport programs<\/li>\n<li>Campus and staff shuttle services<\/li>\n<li>Tour operators offering pickup and drop-off transfers<\/li>\n<li>City-to-city and intercity shuttle route operators<\/li>\n<li>Van, minibus, and small coach transport businesses<\/li>\n<\/ul>\n\n<h4>Core booking flow<\/h4>\n\n<ol>\n<li>A visitor searches by route, picks a pickup point, a date (only days the shuttle actually runs are selectable), a time, and the number of passengers.<\/li>\n<li>The plugin shows the correct drop-off stops and drop-off points for that route and direction, live seat availability, and the fare.<\/li>\n<li>On a round-trip route, the customer can toggle between one-way and round-trip pricing before booking.<\/li>\n<li>The booking is added to the WooCommerce cart (round trip automatically adds the return leg), and checkout is handled entirely by WooCommerce.<\/li>\n<li>After checkout, a shuttle booking record is created and linked to the order, ready for the admin to manage.<\/li>\n<\/ol>\n\n<h4>Feature highlights<\/h4>\n\n<p><strong>Route, stop &amp; schedule management<\/strong><\/p>\n\n<ul>\n<li>Custom shuttle post type with route builder<\/li>\n<li>Ordered, multi-stop route configuration<\/li>\n<li>Time-offset and distance data per stop (from the first stop)<\/li>\n<li>Pickup point and drop-off point support per stop<\/li>\n<li>Schedule manager with multiple departure times per route<\/li>\n<li>Per-route operating days (weekday availability)<\/li>\n<li>Turnaround-time setting with automatically calculated return departure time<\/li>\n<\/ul>\n\n<p><strong>Pricing<\/strong><\/p>\n\n<ul>\n<li>Stop-to-stop pricing matrix for every valid route segment<\/li>\n<li>Independent return-direction pricing with automatic one-way fallback<\/li>\n<li>Live fare and subtotal display before checkout<\/li>\n<li>Server-side price and availability re-validation on add-to-cart (never trusts the browser)<\/li>\n<\/ul>\n\n<p><strong>Booking &amp; availability<\/strong><\/p>\n\n<ul>\n<li>Real-time, direction-aware seat availability per date, route and segment<\/li>\n<li>Automatic calendar graying-out of fully booked dates, per direction<\/li>\n<li>Round-trip booking with automatic return-leg cart handling<\/li>\n<li>Standalone reverse-direction (return-only) booking support<\/li>\n<\/ul>\n\n<p><strong>WooCommerce integration<\/strong><\/p>\n\n<ul>\n<li>Every shuttle booking becomes a real WooCommerce order<\/li>\n<li>Works with your existing WooCommerce payment gateways, taxes, and order emails<\/li>\n<li>Shuttle products are managed automatically \u2014 no manual product setup<\/li>\n<\/ul>\n\n<p><strong>Admin &amp; management<\/strong><\/p>\n\n<ul>\n<li>Modern 4-step shuttle editor (Basic Info \u2192 Route \u2192 Pricing \u2192 Schedule) with AJAX autosave<\/li>\n<li>Searchable, filterable, paginated shuttle list with instant AJAX filtering<\/li>\n<li>Bookings dashboard with shuttle\/route\/date filters<\/li>\n<li>One-click booking status changes (processing, completed, pending, on-hold, cancelled, refunded, failed) with no page reload<\/li>\n<li>CSV export of all bookings<\/li>\n<li>One-click demo data importer to explore the plugin instantly<\/li>\n<li>Built-in environment status page (WordPress, WooCommerce, and PHP checks)<\/li>\n<\/ul>\n\n<p><strong>Developer-friendly<\/strong><\/p>\n\n<ul>\n<li>Translation-ready (all strings use the <code>magepeople-shuttle-booking<\/code> text domain)<\/li>\n<li>Clean action\/filter hooks for extending settings<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.8 or higher<\/li>\n<li>PHP 7.4 or higher<\/li>\n<li>WooCommerce (required \u2014 MagePeople Shuttle Booking sells shuttle tickets through the WooCommerce cart and checkout)<\/li>\n<\/ul>\n\n<h3>Shortcodes<\/h3>\n\n<h4>Shuttle search form<\/h4>\n\n<pre><code>[mpsb_shuttle_search]\n<\/code><\/pre>\n\n<p>Displays the full shuttle booking search form (route, pickup point, date, time, passengers, drop-off stop\/point) and the trip-review screen that follows it. Travel Pass purchasing appears inside this same form automatically once weekly or monthly pass pricing is configured \u2014 there is no separate pass shortcode.<\/p>\n\n<p><strong>Attributes<\/strong><\/p>\n\n<ul>\n<li><code>shuttle_id<\/code> \u2014 lock the form to a single shuttle (used automatically on a single shuttle page). This also removes the shuttle-type tab bar, since there is only one shuttle to switch between.<\/li>\n<li><code>target_page<\/code> \u2014 URL the search form should submit to.<\/li>\n<li><code>form_title<\/code> \u2014 heading text shown above the form (default: \"Book a Shuttle\").<\/li>\n<li><code>form_subtitle<\/code> \u2014 supporting text shown under the heading.<\/li>\n<li><code>passes<\/code> \u2014 controls the Travel Pass tab. Default <code>auto<\/code> shows it whenever pass pricing is on; <code>no<\/code> hides it on this form only.<\/li>\n<li><code>disable<\/code> \u2014 comma-separated shuttle-type slugs to remove from the shuttle-type tab bar on this form. Accepts <code>shared-city-shuttle<\/code>, <code>private-shuttle<\/code>, <code>airport-transfer<\/code>.<\/li>\n<\/ul>\n\n<p><strong>Controlling the shuttle-type tabs<\/strong><\/p>\n\n<p>The shuttle-type tab bar (Shared City Shuttle \/ Private Shuttle \/ Airport Transfer) builds itself from whichever types currently have published routes \u2014 a type with no routes never gets a tab, and if only one type qualifies the bar is skipped entirely. Use <code>disable<\/code> to remove types yourself; it only affects this instance of the form and does not unpublish the routes elsewhere on the site. No attribute controls which tab opens by default, renames a tab, or reorders the tabs.<\/p>\n\n<p><strong>Examples<\/strong><\/p>\n\n<pre><code>[mpsb_shuttle_search shuttle_id=\"123\"]\n\n[mpsb_shuttle_search disable=\"private-shuttle,airport-transfer\"]\n\n[mpsb_shuttle_search passes=\"no\"]\n<\/code><\/pre>\n\n<h4>Shuttle catalog \/ list<\/h4>\n\n<pre><code>[mpsb_shuttle_list]\n<\/code><\/pre>\n\n<p>Displays a responsive grid or list of published shuttles with a built-in Grid\/List view toggle.<\/p>\n\n<p><strong>Attributes<\/strong><\/p>\n\n<ul>\n<li><code>columns<\/code> \u2014 number of grid columns (default <code>3<\/code>; supports <code>1<\/code>, <code>2<\/code>, <code>3<\/code>, <code>4<\/code>, etc.).<\/li>\n<li><code>posts_per_page<\/code> \u2014 number of shuttles to display (default <code>-1<\/code> for all).<\/li>\n<li><code>category<\/code> \u2014 filter by vehicle category slug (e.g. <code>van<\/code>).<\/li>\n<li><code>type<\/code> \u2014 filter by shuttle type slug (e.g. <code>airport<\/code>).<\/li>\n<li><code>stop<\/code> \u2014 filter by stop slug or stop ID.<\/li>\n<li><code>orderby<\/code> \u2014 sort field: <code>date<\/code> (default), <code>title<\/code>, <code>menu_order<\/code>, <code>rand<\/code>, <code>modified<\/code>, or <code>ID<\/code>.<\/li>\n<li><code>order<\/code> \u2014 sort direction: <code>ASC<\/code> or <code>DESC<\/code> (default <code>DESC<\/code>).<\/li>\n<li><code>ids<\/code> \u2014 comma-separated shuttle IDs to show, in that order.<\/li>\n<li><code>exclude<\/code> \u2014 comma-separated shuttle IDs to leave out.<\/li>\n<\/ul>\n\n<p><strong>Example<\/strong><\/p>\n\n<pre><code>[mpsb_shuttle_list columns=\"3\" posts_per_page=\"6\" category=\"luxury-van\"]\n<\/code><\/pre>\n\n<h4>Customer bookings dashboard<\/h4>\n\n<pre><code>[mpsb_my_bookings]\n<\/code><\/pre>\n\n<p>Shows the signed-in customer's Upcoming, Past, Cancelled, and All bookings plus any travel passes. These tabs are automatic \u2014 the dashboard opens on the first tab that has bookings in it \u2014 and are not configurable through attributes.<\/p>\n\n<p><strong>Attributes<\/strong><\/p>\n\n<ul>\n<li><code>title<\/code> \u2014 heading text shown above the dashboard (default: \"My bookings\").<\/li>\n<\/ul>\n\n<h4>Guest booking lookup<\/h4>\n\n<pre><code>[mpsb_find_booking]\n<\/code><\/pre>\n\n<p>Lets a guest look up a booking using its reference and booking email.<\/p>\n\n<p><strong>Attributes<\/strong><\/p>\n\n<ul>\n<li><code>title<\/code> \u2014 heading text shown above the form (default: \"Find my booking\").<\/li>\n<\/ul>\n\n<h4>Route map<\/h4>\n\n<pre><code>[mpsb_route_map]\n<\/code><\/pre>\n\n<p>Displays a map of one saved shuttle route.<\/p>\n\n<p><strong>Attributes<\/strong><\/p>\n\n<ul>\n<li><code>shuttle_id<\/code> \u2014 the shuttle whose route to map (defaults to the current shuttle when used on a shuttle's own page).<\/li>\n<li><code>route_id<\/code> \u2014 which of that shuttle's saved routes to display.<\/li>\n<\/ul>\n\n<p><strong>Example<\/strong><\/p>\n\n<pre><code>[mpsb_route_map shuttle_id=\"123\" route_id=\"your-route\"]&lt;h3&gt;Developer Hooks &amp; Filters&lt;\/h3&gt;\n<\/code><\/pre>\n\n<p>MagePeople Shuttle Booking exposes a small set of hooks for developers who want to extend it:<\/p>\n\n<ul>\n<li><code>do_action( 'mpsb_before_add_cart_btn' )<\/code> \u2014 fires immediately before the add-to-cart button, useful for injecting custom content into the booking form.<\/li>\n<li><code>apply_filters( 'mpsb_filter_settings', $pages )<\/code> \u2014 register additional settings pages\/sections into the plugin's settings framework.<\/li>\n<\/ul>\n\n<p>MagePeople Shuttle Booking also integrates through standard WooCommerce hooks (<code>woocommerce_add_to_cart<\/code>, <code>woocommerce_checkout_order_processed<\/code>, <code>woocommerce_order_status_changed<\/code>, and others) so booking records always stay in sync with the linked WooCommerce order.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin's shared settings\/field-rendering framework can connect to the following third-party services, depending on which field types are used in a given configuration:<\/p>\n\n<p><strong>Google Maps JavaScript API<\/strong><\/p>\n\n<p>Used to render an interactive map preview for \"Google Map\" type settings fields (used to let an admin visually place a location marker). When a field of this type is displayed with a preview enabled, the plugin loads Google's Maps JavaScript API (<code>https:\/\/maps.googleapis.com\/maps\/api\/js<\/code>) using the API key configured for that field, and sends the browser's request for that script (including the configured API key) to Google. No user location or personal data is transmitted by the plugin itself.\nThis service is provided by Google: <a href=\"https:\/\/cloud.google.com\/maps-platform\/terms\">Google Maps Platform Terms of Service<\/a>, <a href=\"https:\/\/policies.google.com\/privacy\">Google Privacy Policy<\/a>.<\/p>\n\n<p><strong>Google reCAPTCHA<\/strong><\/p>\n\n<p>Used to render a reCAPTCHA (v2 checkbox or v3) challenge for \"Google reCAPTCHA\" type settings fields, to help protect forms from spam\/bot submissions. When this field type is displayed, the plugin loads Google's reCAPTCHA API (<code>https:\/\/www.google.com\/recaptcha\/api.js<\/code>) using the site key configured for that field. Google's reCAPTCHA script may collect information about the visitor's browser and interactions in order to assess whether the visitor is human, per Google's own reCAPTCHA terms.\nThis service is provided by Google: <a href=\"https:\/\/policies.google.com\/terms\">Google reCAPTCHA Terms of Service<\/a>, <a href=\"https:\/\/policies.google.com\/privacy\">Google Privacy Policy<\/a>.<\/p>\n\n<p><strong>Gravatar<\/strong><\/p>\n\n<p>Used for the \"User select\" settings field type to display a preview image next to each selected WordPress user, via WordPress core's built-in <code>get_avatar_url()<\/code> function. This requests an avatar image from Gravatar.com based on the selected user's email address (as WordPress core does by default for any user avatar, site-wide).\nThis service is provided by Automattic: <a href=\"https:\/\/gravatar.com\/site\/terms-of-service\">Gravatar Terms of Service<\/a>, <a href=\"https:\/\/automattic.com\/privacy\/\">Automattic Privacy Policy<\/a>.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin does not call any third-party API or remote service from the front end of your site, and does not transmit visitor data to any external service.<\/p>\n\n<p>The Shuttle editor screen in wp-admin (Shuttles \u2192 Add\/Edit Shuttle) loads two web fonts (\"Inter\" and \"Plus Jakarta Sans\") directly from Google Fonts (fonts.googleapis.com) to style that admin screen. This request is made by the admin user's own browser only when they open that specific screen, and is not loaded anywhere on the public-facing site. See Google's Privacy Policy: https:\/\/policies.google.com\/privacy and Terms of Service: https:\/\/policies.google.com\/terms<\/p>\n\n<p>If the WooCommerce plugin is active, checkout and payment processing (including any communication with payment gateways such as Stripe or PayPal) is handled entirely by WooCommerce and the payment gateway's own plugin\/extension \u2014 not by MagePeople Shuttle Booking. Refer to WooCommerce's and your chosen payment gateway's own documentation for details on what data they transmit.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>magepeople-shuttle-booking<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install it directly from <strong>Plugins \u2192 Add New<\/strong> inside your WordPress admin.<\/li>\n<li>Make sure <strong>WooCommerce<\/strong> is installed and active \u2014 MagePeople Shuttle Booking will show a notice with a one-click install\/activate link if it isn't.<\/li>\n<li>Activate <strong>MagePeople Shuttle Booking<\/strong> through the <strong>Plugins<\/strong> menu.<\/li>\n<li>Follow the on-screen onboarding to install WooCommerce (if needed) and optionally import demo shuttle data.<\/li>\n<li>Go to <strong>Shuttles \u2192 Add New<\/strong> and configure your first route, stop-to-stop pricing, and schedule.<\/li>\n<li>Add the <code>[mpsb_shuttle_search]<\/code> shortcode to any page to display the booking search form, and\/or <code>[mpsb_shuttle_list]<\/code> to display your shuttle catalog.<\/li>\n<\/ol>\n\n<h4>Recommended setup order<\/h4>\n\n<ol>\n<li>Create shuttle stops first (Shuttles \u2192 Stops).<\/li>\n<li>Create shuttle types and vehicle categories (Shuttles \u2192 Types \/ Categories).<\/li>\n<li>Add a shuttle and define the route's stop order carefully \u2014 first stop to last, in the order the vehicle actually travels.<\/li>\n<li>Set <strong>Time Offset<\/strong> as the total minutes from the first stop to each stop (not from the previous stop).<\/li>\n<li>Set <strong>Distance<\/strong> as the total distance from the first stop to each stop.<\/li>\n<li>Fill in pricing for every stop-to-stop combination you want bookable; leave the return field blank to reuse the one-way fare automatically.<\/li>\n<li>Add schedule departure times and select the operating days.<\/li>\n<li>Publish the shuttle and place a real test booking.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20magepeople%20shuttle%20booking%20require%20woocommerce%3F\"><h3>Does MagePeople Shuttle Booking require WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. WooCommerce handles the cart, checkout, payment gateways, taxes, and order management for every shuttle booking. The plugin will not activate its booking features until WooCommerce is installed and active, and will show you a one-click install\/activate prompt if needed.<\/p><\/dd>\n<dt id=\"can%20i%20sell%20round-trip%20shuttle%20tickets%3F\"><h3>Can I sell round-trip shuttle tickets?<\/h3><\/dt>\n<dd><p>Yes. Turn on round trip for a route, set a turnaround time, and the plugin automatically calculates the return departure time from the forward journey and adds a correctly priced, correctly directioned return leg to the customer's cart.<\/p><\/dd>\n<dt id=\"how%20is%20the%20return%20fare%20calculated%3F\"><h3>How is the return fare calculated?<\/h3><\/dt>\n<dd><p>Each route segment can have its own independent return-direction price. If you leave the return price empty for a segment, the plugin automatically uses the one-way fare for that direction, so you're not required to fill in every field twice.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20support%20multiple%20pickup%20and%20drop-off%20stops%3F\"><h3>Does the plugin support multiple pickup and drop-off stops?<\/h3><\/dt>\n<dd><p>Yes. Build a route with as many ordered stops as you need, each with its own time offset, distance, and pickup\/drop-off points, and price any valid stop-to-stop combination.<\/p><\/dd>\n<dt id=\"can%20i%20restrict%20which%20days%20a%20shuttle%20operates%3F\"><h3>Can I restrict which days a shuttle operates?<\/h3><\/dt>\n<dd><p>Yes. Each route's schedule includes selectable operating days, and the frontend booking calendar automatically hides days the shuttle doesn't run and dates that are already fully booked.<\/p><\/dd>\n<dt id=\"is%20seat%20availability%20tracked%20separately%20for%20outbound%20and%20return%20trips%3F\"><h3>Is seat availability tracked separately for outbound and return trips?<\/h3><\/dt>\n<dd><p>Yes. Forward and return seat inventory are tracked independently and only affect each other where the actual travelled segments genuinely overlap, so a fully booked outbound run won't incorrectly block an available return run.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20include%20a%20visual%20seat%20map%20%2F%20individual%20seat%20selection%3F\"><h3>Does this plugin include a visual seat map \/ individual seat selection?<\/h3><\/dt>\n<dd><p>No. MagePeople Shuttle Booking manages available seat capacity per route, date, and direction (a live seat count), rather than a graphical seat-map picker.<\/p><\/dd>\n<dt id=\"can%20i%20try%20the%20plugin%20quickly%20without%20setting%20everything%20up%20by%20hand%3F\"><h3>Can I try the plugin quickly without setting everything up by hand?<\/h3><\/dt>\n<dd><p>Yes. The one-click importer adds 30 U.S. demo services for New York and Ohio: ten Shared, ten Private, and ten Airport shuttles. Every offered demo pickup\/drop-off corridor has four or five matching choices across its supported directions, with one-way and round-trip routes, fares, checkout discounts, schedules, Travel Pass plans, location badges, and featured images. Re-importing safely synchronizes the versioned demo records without changing real shuttles.<\/p><\/dd>\n<dt id=\"can%20i%20display%20a%20catalog%20of%20my%20shuttles%3F\"><h3>Can I display a catalog of my shuttles?<\/h3><\/dt>\n<dd><p>Yes, use the <code>[mpsb_shuttle_list]<\/code> shortcode. It renders a responsive grid (or list) of published shuttles with a built-in view toggle, and can be filtered by vehicle category or shuttle type.<\/p><\/dd>\n<dt id=\"is%20magepeople%20shuttle%20booking%20translation-ready%3F\"><h3>Is MagePeople Shuttle Booking translation-ready?<\/h3><\/dt>\n<dd><p>Yes. Every string in the plugin uses the <code>magepeople-shuttle-booking<\/code> text domain and is ready for translation.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20any%20woocommerce%20payment%20gateway%3F\"><h3>Does it work with any WooCommerce payment gateway?<\/h3><\/dt>\n<dd><p>Yes. Because every shuttle booking is placed through a normal WooCommerce order, any payment gateway you've already configured in WooCommerce works automatically.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added the Free booking-card extension point and professional Pro badge for customer booking chat.<\/li>\n<li>Added a searchable plain-language documentation preview for the Pro booking chat system.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added dynamic passenger types, passenger information fields, and passenger pricing rules.<\/li>\n<li>Added route maps with OpenStreetMap, route drawing, saved stop search, and route import support.<\/li>\n<li>Added the searchable administrator Documentation centre with automatic Free and Pro guides.<\/li>\n<li>Improved native and WooCommerce booking data, validation, checkout presentation, and customer booking details.<\/li>\n<li>Improved check-in, route editing, mobile booking presentation, and passenger information documents.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release of MagePeople Shuttle Booking.<\/li>\n<li>Shuttle post type with ordered, multi-stop route builder.<\/li>\n<li>Stop-to-stop pricing matrix with automatic return-fare fallback.<\/li>\n<li>Schedule manager with per-route operating days.<\/li>\n<li>Round-trip booking with automatic, turnaround-time-based return scheduling.<\/li>\n<li>Direction-aware, real-time seat availability.<\/li>\n<li>Full WooCommerce cart and checkout integration.<\/li>\n<li><code>[mpsb_shuttle_search]<\/code> and <code>[mpsb_shuttle_list]<\/code> shortcodes.<\/li>\n<li>Admin bookings dashboard with filters, inline status changes, and CSV export.<\/li>\n<li>Modern 4-step shuttle editor with AJAX autosave.<\/li>\n<li>One-click demo data importer and guided onboarding.<\/li>\n<li>Built-in environment status page.<\/li>\n<\/ul>","raw_excerpt":"Sell airport, hotel &amp; corporate shuttle tickets with WooCommerce \u2014 routes, stop pricing, schedules, round trips, seats.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/343294","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=343294"}],"author":[{"embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/magepeopleteam"}],"wp:attachment":[{"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=343294"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=343294"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=343294"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=343294"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=343294"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ta.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=343294"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}