Release Notes
RideCab Changelog
Full version history and release notes for the RideCab plugin. Each release is committed to backward compatibility within the same major version.
Latest release v1.7.0 ·
- A surge rule can replace the per-kilometre rate — set Price increase to “Replace the per-km rate” and the rule stops adding to the fare: it sets the price per kilometre outright for the period it covers. You type the tariff you actually charge, 3.50, instead of working out the percentage that reaches it from the vehicle’s standing rate. Every vehicle the rule covers gets its own rate field, so one rule carries a whole column of your price list rather than needing one rule per vehicle. Replacement rates do not stack: the highest-priority matching rule wins and the search stops there, so a holiday weekend placed above an ordinary weekend simply takes precedence
- Several date ranges in one rule — a date-based rule now holds as many ranges as you need and fires when the pickup falls inside any of them, so a whole school-holiday calendar lives in a single rule instead of one rule per period. Rules saved before this release keep their single range and work untouched
- Choose the status a booking starts on — Settings → General → Default Booking Status: Confirmed, as before, or Pending for operators who vet rides before committing to them. It labels the ride inside RideCab and leaves the WooCommerce order alone, since the payment method decides that
- A non-default booking status would have been undone immediately — the booking row is created on the same order transition that synchronises the status back from WooCommerce, and the two fired in an order that let the synchronisation overwrite the new row a moment after it was written. Sites leaving the status at Confirmed were never affected
- Vehicle results can now be filtered by party size — until now every active vehicle was offered whatever the party size, so a search for seven people still returned a three-seat saloon. Switch on Settings → General → Passenger Capacity and any vehicle seating fewer passengers than requested is greyed out with the reason shown on the card, and cannot be selected. The card stays visible on purpose: the customer can see the vehicle exists but is too small for this trip. Off by default, so updating changes nothing until you enable it
- Overbooking protection — set Fleet Quantity on each vehicle to the number of cars of that type you actually operate, switch on Settings → General → Fleet Availability, and a vehicle type stops being offered once all of its units are booked over the requested slot. Every other type stays bookable: running out of saloons does not take your minibus off the market. A ride holds its vehicle for the length of the trip plus a turnaround buffer, 60 minutes by default, covering the driver’s return, and a cancelled booking releases its vehicle at once. Off by default, and a vehicle left at 0 counts as unlimited
- Both limits are enforced on the server — the fare and cart endpoints apply the capacity and fleet rules again before anything reaches the basket, so neither can be bypassed by calling the API directly
- The extension hooks are documented — the Developer Hooks section now lists every hook a companion plugin can use, the arguments each receives, and a worked example of repricing a ride on a distance other than the one travelled, such as billing the vehicle’s return to a fixed operating base. The hooks are not new and none of them changed; they simply had no documentation. Two misleading comments in the email classes were also corrected — both named
ridecab_booking_createdas the trigger for the booking confirmation, an action the plugin has never fired
- Booking advance message showed the wrong time — a site in Brussels with four hours’ notice told customers the earliest ride was six hours away, because the site’s timezone offset was applied twice when formatting the message. Only the wording was affected: bookings were always accepted or refused at the correct moment
- No prices on step 2 when a minimum booking advance is set — the form offers the earliest bookable slot exactly on the limit, so the few seconds a customer spends reading the page pushed that time under it and the fare request was refused. The server check now allows five minutes of slack, which also absorbs the difference between the visitor’s clock and the server’s
- A refused fare request said nothing — the customer saw an empty vehicle list with no explanation. The reason returned by the server is now shown instead of being discarded
- Bookings could not be completed on 1.5.3 — clicking the final booking button did nothing, and the log showed
Uncaught Error: Class "RideCab_Fare_Calculator" not foundfrom the fare and cart REST routes. The booking-window check added in 1.5.2 called that class before the file defining it had been loaded. Both routes now load it first. If you are on 1.5.3, update straight away — no booking can reach checkout until you do
- Booking advance limits now apply while the customer picks — the calendar is bounded to the bookable window so days outside it are greyed out, time slots inside the notice period are no longer offered, the date opens on the first day a ride can actually be taken, and the message appears as soon as a time is chosen rather than after the whole form has been filled in. The checks on continuing and on the server are unchanged
- Booking advance limits did nothing — Minimum Booking Advance and Maximum Booking Advance (Settings → General) were saved but never applied, so a customer could book a ride for five minutes from now on a site requiring 24 hours’ notice. Both are enforced now: the form refuses the date and names the earliest or latest time it can accept, and the fare and cart endpoints check it again, because anything done in the browser can be bypassed. Setting either to 0 still removes that limit
- Booking form broke when the theme also loaded Google Maps — many taxi themes do, and increasingly with Google’s newer bootstrap loader, under which nothing exists on
google.mapsuntilimportLibrary()has resolved. RideCab callednew google.maps.Map()too early, threw “is not a constructor”, and took the map, the address autocomplete and the whole form down with it. The libraries it needs are now awaited first, and a map that still cannot load costs only the map — the address fields keep working
- One Calendar menu, one calendar — a dropdown at the top of the Calendar screen picks the one in use: the built-in colour-coded month view, or Google Calendar. The built-in calendar removed in 1.4.0 is back and works out of the box with no setup; Google Calendar is connected from that same screen, which also absorbs the separate menu added in 1.4.0. Sites that had already connected Google keep it selected after updating
- Switch off automatic emails (Settings → Emails) — unchecked, RideCab sends nothing at all, neither the customer confirmation nor your admin copy, and stops silencing WooCommerce’s own order emails so your customer still receives something. Payment links, sent by WooCommerce on request, are never affected either way
- Booking form appeared completely unstyled on some sites, most often those built with page builders. The stylesheet is queued while the shortcode runs, after the page head is printed, and WordPress is meant to catch up in the footer — several builder stacks drop those late styles entirely, while the footer script still loaded, leaving the form raw. RideCab now emits the tag itself when nothing else will, which also removes the brief flash of unstyled content
- Deprecation notices on PHP 8.4 and newer — the bundled update-checker library used implicitly nullable parameters, which PHP now warns about on every page load. Four signatures were corrected. On a site configured to display notices, this also corrupted JSON responses and could break update checks
- FullCalendar ships with the plugin instead of loading from an external CDN — the calendar no longer breaks when that CDN is unreachable or blocked, and visitor IP addresses are no longer handed to a third party
- Google Calendar synchronisation — bookings are written to Google Calendar and kept in step: created when an order reaches processing, on-hold or completed, updated when the ride changes, and deleted when it is cancelled or refunded. Connect under RideCab → Google Calendar, which walks you through the one-time setup
- A calendar for the company and one per driver — the business account receives every booking, while each driver connects their own Google account from their WordPress profile and receives only the rides assigned to them. Reassigning a ride moves the event from one driver’s calendar to the other’s
- Flat fee distance bands — a distance band can now price the whole ride instead of charging a rate per unit. A 20 km ride in a
15–25 km = 60band costs 60, not the sum of the rates of every band it crosses. Choose the mode under Vehicles → pricing type Tiered Distance → Band Calculation; existing vehicles keep the previous cumulative behaviour - Ordinary pricing beyond the bands — any distance no band covers, including everything past the last one, is priced with the vehicle’s base fare, rate per unit and rate per minute. Surcharges, geofence rules and the minimum fare apply on top in both modes
- Calendar tokens encrypted, writes run in the background — Google refresh tokens are encrypted in the database, and calendar writes happen on a scheduled event, so checkout is never delayed and a Google outage never fails an order
- Built-in booking calendar removed — RideCab → Calendar and its externally hosted FullCalendar dependency are gone; Google Calendar replaces them. With no Google account connected, the plugin shows no calendar
- Visitor statistics removed — RideCab → Visitors, introduced in 1.3.6, has been removed along with its front-end tracking ping. Existing data is left untouched when updating and is dropped only if the plugin is uninstalled
- Airport, station and hotel pickups keep the venue name — Google Places returns only the postal address for named venues, so a pickup at Bordeaux Airport was stored as
33700 Mérignac, France. The place name is now prefixed —Aéroport de Bordeaux-Mérignac, 33700 Mérignac, France— in confirmation emails, the WooCommerce order and the bookings list - Applies to every address field — pickup, destination and intermediate stops, on both the scheduled and instant booking forms. Existing bookings are left unchanged
- Visitor statistics by country — a lightweight front-end ping detects each visitor’s country from their IP via WooCommerce geolocation (MaxMind) and records an aggregate per-country daily count under RideCab → Visitors
- Ranked country breakdown — flags, totals and a date filter
- Privacy-friendly by design — no IP addresses are stored, only aggregate counts
- One confirmation email for customer and admin — the admin now receives the exact same email as a hidden BCC, controlled by the “New Ride Booking (Admin)” enable toggle and recipient field
- Contact details on the admin copy only — customer name, email and phone appear on the admin’s copy and stay hidden on the customer’s own
- Separate admin email removed — the differently-worded admin notification is no longer sent
- “Apply surge before the minimum fare” option (Settings → General) — when enabled, time-based surge and geofence surcharges are calculated first and the minimum fare acts as a final price floor, absorbing the surge on rides below the minimum. Disabled by default; only affects rides priced below the minimum fare
- Geofence surcharges always applied before the minimum fare — independently of the new option
- Plugin version shown in the RideCab Settings page header
- Booking form map defaulted to London — the placeholder coordinates were left as central London. New forms now use the global Default Map Center (Settings → Maps), and existing forms still on the placeholder fall back to it automatically
- Confirmation emails sent in English on non-English sites — 42 email and settings strings were missing from the bundled French, German, Spanish and Arabic translations. Emails now follow the site language
- Route map at the top of every booking email — a Google Static Maps image showing pickup (A), stops and destination (B) markers
- SIREN and VAT/TVA number fields (Settings → Emails) — displayed in the email company block, hidden automatically when left empty
- Geofence shape drawing rebuilt — Google removed the Drawing Library (
DrawingManager) from the Maps JavaScript API in May 2026, which broke both drawing and displaying saved shapes. Drawing now uses a built-in click-to-draw mode with visible vertex dots, with no Google drawing library needed - “Draw a circle” mode in geofence rules — click to place a circle, drag it to move or drag its edge to resize; stored as a polygon so pricing works unchanged
- Geofence shapes silently lost when toggling Precise/Anywhere, dragging a shape, or saving mid-draw — shapes are now auto-finished and re-serialised from the map state on every save
- Default Map Center setting (Settings → Maps) — search your city with autocomplete and fine-tune with a draggable preview map; used as the starting view of the geofence rule maps
- Geolocation button on the pickup field — detects the visitor’s current address and asks for confirmation before applying it
- WooCommerce block checkout support — booking details are now saved on orders placed through the block-based checkout (Store API), not only the classic checkout
- Invoices missing trip details — pickup, destination and date/time now fall back to order line-item meta in any language and to the bookings table; historical WooCommerce orders are imported automatically when opening the Invoices page
- Invoice “From” block now falls back to the site name when the invoice company settings are empty
- PHP warning from the update checker when no or invalid license key (HTTP 403 from the update server) — update checks now run only with a license key and never print warnings
- All new admin and front-end strings translated in French, German, Spanish and Arabic
- License system — activate RideCab with your purchase key under RideCab → License; single-domain activation with automatic key delivery by email
- License enforcement — all features are disabled until a valid license is activated
- Automatic updates — receive new versions directly in your WordPress dashboard once licensed
- Custom email notifications — admin — branded email sent to the site admin instantly when a new booking is placed, with full booking details and fare breakdown
- Custom email notifications — customer — branded confirmation email sent to the customer instantly when a new booking is placed, with booking summary and fare breakdown
- Return trip pricing fixed —
is_returnwas never forwarded to the fare estimate or cart endpoints; all three layers (JS state,fare/estimate,cart/add) now correctly calculate and charge the return leg - Return date & time tracked in JS state — return date, hour and minute fields now sync to form state; return datetime shown in the step 3 booking summary
- Return Trip Discount setting — new field in Settings → General to configure a percentage discount (0–100%) applied to the return leg fare
- Multi-step booking form — 3-step form with Google Maps autocomplete, returned as shortcode
[ridecab_booking_form] - 4 pricing strategies — per km, per hour, tiered distance, tiered hourly — configurable per vehicle type
- Polygon geofence rules — draw pickup/dropoff zones on Google Maps, set fixed fares, surcharges or percentages per route and vehicle; bidirectional or one-way rules
- WooCommerce checkout integration — rides go through the WC cart; all payment gateways available automatically; HPOS compatible
- Driver management — create driver profiles, assign bookings, colour-coded calendar view; disabled by default, opt-in via Settings
- PDF invoices — 4 templates (Classic, Modern, Minimal, Corporate) with browser print-to-PDF and company branding settings
- Surge pricing rules — time-based, date-based and day-of-week surcharges with multiplier or flat rate; vehicle-specific application
- Coupon / discount codes — own coupon system with percentage or fixed discounts, usage limits, per-user limits and expiry dates
- Booking management dashboard — WP_List_Table with status badges, bulk actions, search and filter; booking detail with fare breakdown and driver assignment
- FullCalendar integration — monthly/weekly/daily views with driver colour-coded events
- Multiple booking forms — create independent forms with separate pricing, map settings, time intervals and colours
- 12h/24h time format — auto-detected from WordPress Settings → General; AM/PM embedded inside the hour field
- Translation-ready — bundled .pot file; de_DE, fr_FR, es_ES, ar translations included
- REST API —
/wp-json/ridecab/v1/endpoints for fare estimation and cart - Appearance settings — primary/secondary colour pickers and custom error messages for the booking form