Contents
Troubleshooting - Plugixa Chauffeur
Start here. Most reports fall into one of these, and several of them are the plugin doing exactly what it was set up to do.
The booking form shows an error instead of the wizard
The form’s container loads first with “Loading booking form…”, then the wizard asks the server for the form’s settings. What replaces the loading text tells you what went wrong.
| What you see | Cause and fix |
|---|---|
| “Please provide a valid booking form id, e.g. [plugixa_chauffeur_booking_form id=“1”].” | The shortcode has no id, or an id that is not a positive number. Copy the shortcode from the form’s Embed card. See Shortcodes. |
| “Booking form not found.” | The form with that ID does not exist, or it is a draft. Only published forms are served to visitors. Publish it under Plugixa Chauffeur -> Booking Forms. |
| “Something went wrong. Please try again.” | The request did not return the plugin’s answer at all. See the next section. |
| The loading text never goes away | The wizard’s script did not run. Look for a JavaScript error in the browser console, and check that an optimisation plugin is not removing or deferring booking-wizard.js incorrectly. |
REST requests return 404
The wizard and the admin app both talk to /wp-json/plugixa-chauffeur/v1/. If
that address does not reach WordPress, the wizard shows “Something went wrong.
Please try again.” and the admin screens fail to load their data.
Open https://example.com/wp-json/plugixa-chauffeur/v1/ in a browser, with your
own domain. You should see a JSON description of the routes.
| Result | Cause and fix |
|---|---|
| The web server’s own 404 page | The /wp-json/ address is not being rewritten to WordPress. This happens when Settings -> Permalinks is set to Plain, or when the rewrite rules are missing from the server configuration. Choose any other permalink structure and save, which also rewrites the rules. See the note on plain permalinks below. |
JSON with the code rest_no_route |
WordPress answered, but the route is not registered. For /drivers, /pricing-rules, /routes and /reports/summary that is normal on the free edition: those routes exist only in Pro. Otherwise the plugin is not active. |
| A login page, or a 401 or 403 that is not JSON | A security plugin or a server rule is blocking the REST API for visitors. The public routes under /public/ must be reachable without logging in. |
Plain permalinks
With Plain permalinks the /wp-json/ addresses do not exist. WordPress
serves the REST API at /?rest_route=/plugixa-chauffeur/v1/ instead. The
wizard and the admin app ask WordPress for the REST address rather than
assuming /wp-json/, so they follow that form by themselves.
What does not follow is any address you typed yourself. The usual casualty is
the Stripe webhook: an endpoint registered as
https://example.com/wp-json/plugixa-chauffeur/v1/public/stripe-webhook answers
404 on a plain-permalink site, and bookings stay unpaid. Either register
https://example.com/?rest_route=/plugixa-chauffeur/v1/public/stripe-webhook
or, more simply, switch to any non-plain permalink structure, which is the set-up the plugin is normally run on.
A booking is refused
The server checks every booking again, whatever the wizard allowed. These are the messages a customer can see on the first or the last step.
| Message | Cause and fix |
|---|---|
| “Bookings must be made at least … in advance.” | The pickup is sooner than a lead time allows. There are two: Minimum lead time under Plugixa Chauffeur -> Availability, when availability rules are on, and Minimum lead time on the booking form itself. Both are checked, and the stricter one wins. |
| “The pickup time must be in the future.” | Availability rules are on with a lead time of 0, and the pickup is in the past. |
| “Bookings can be made at most … days in advance.” | The pickup is beyond the Booking horizon. |
| “The selected date is not available for booking.” | The pickup falls on a blackout date. |
| “We are closed on … Please choose another day.” | That weekday is switched off in Business hours. On a new install Saturday and Sunday are closed. |
| “Bookings on … are available between … and …” | The pickup time is outside that day’s hours. The closing time itself is not bookable. |
| “Please choose a valid pickup date and time.” | The pickup time is empty or not a date the server can read. |
| “Selected vehicle is not available.” | The vehicle is a draft, or was deleted or unpublished while the customer was booking. |
| “Selected vehicle cannot carry that many passengers.” | The passenger count is above the vehicle’s Max passengers. |
| “Please provide a valid name and email.” | The name is empty or the email is not valid. |
| “Security check failed. Please refresh and try again.” | See the security check fails. |
Two things explain most surprises here:
- Availability rules are off until you switch them on. With them off, none of the availability messages can appear and only the form’s own lead time is enforced. With them on, the default is Monday to Friday, 09:00 to 18:00, with 60 minutes’ notice. See Availability.
- Times are read in the site’s time zone, set under Settings -> General in WordPress, not the customer’s. A site left on UTC judges “now” and the business hours in UTC.
The security check fails
“Security check failed. Please refresh and try again.” means the booking was sent without a valid security token. The token is created when the page with the form is built and is valid for a limited time, a day at most.
| Cause | Fix |
|---|---|
| The page was left open for a long time before booking | Reload the page. |
| A page cache serves the same copy of the page for longer than the token lives | Exclude the pages that hold a booking form from the page cache, or shorten the cache lifetime for them to well under 12 hours. |
| The customer logged in or out in another tab after loading the page | Reload the page. |
Vehicles do not appear in the wizard
The second step reads “No vehicles available for this trip.” when no vehicle qualifies.
| Cause | Fix |
|---|---|
| The vehicles are drafts | A new vehicle is a draft until you publish it. Only published vehicles are offered. See Vehicles. |
| No vehicle has enough seats | A vehicle is offered only when its Max passengers is at least the number the customer entered. |
Vehicles are not tied to a booking form: every published vehicle with enough seats is offered on every form.
A price looks wrong
| Symptom | Cause |
|---|---|
| The price is higher than base plus distance | The vehicle’s Minimum price applied, the trip is a return (the distance cost is doubled), or a pricing rule PRO added a surcharge. |
| A vehicle shows 0.00 | The vehicle has no prices set, or, with Pro, the flat-rate route was missing or inactive. See Flat-rate routes. |
| The total changed after editing a booking | Editing Base, Distance or Time on a booking recalculates the total as their plain sum, which drops any pricing-rule adjustment. Changing other fields leaves the total alone. |
| Prices are per kilometre on a miles site | The Distance unit setting changes the label only. Per-distance prices are multiplied by the number the customer types. |
| A pricing rule PRO did not apply | The rule is inactive, one of its conditions did not match, or an earlier rule with Stop processing matched first. See Pricing rules. |
Stripe
Stripe is not offered as a payment method
Stripe appears in the wizard only when Stripe is switched on under Settings -> Payments and the Secret key is filled in. A switch without a key is treated as off.
The customer sees an error at the last step
If Stripe refuses to create the payment page, the booking step fails with Stripe’s own message, for example for a wrong secret key or a currency your Stripe account cannot charge. “Stripe is not configured.” means the secret key was empty at that moment.
The booking has already been saved by then, as Pending and unpaid, and its emails have been sent. If the customer tries again a second booking is created. Cancel or delete the one that was never paid.
The customer paid but the booking still says unpaid
The booking only becomes paid when Stripe’s webhook reaches your site and passes the signature check.
| Cause | Fix |
|---|---|
| Webhook signing secret is empty | Every webhook call is rejected when no secret is set. Enter the secret of your webhook endpoint under Settings -> Payments -> Stripe. |
| The secret belongs to another endpoint or mode | Test mode and live mode have different secrets, and so does each endpoint. Copy the one for this endpoint. |
| No webhook endpoint in Stripe | Add https://example.com/wp-json/plugixa-chauffeur/v1/public/stripe-webhook, with your own domain, and send it the checkout.session.completed event. |
| The server’s clock is wrong | Signatures more than five minutes old are refused. Correct the server time. |
| The request never reaches WordPress | See REST requests return 404. A firewall must let Stripe’s servers post to that address. |
In your Stripe dashboard the endpoint’s delivery log shows the answer the site
gave. A 400 with invalid_signature is one of the first two rows; a 200 means
the call was accepted.
Until it is fixed you can set Payment status to paid by hand on the booking.
The customer came back to “Payment was not completed.”
The customer left Stripe’s page without paying. The booking stays Pending and unpaid: “Your booking is awaiting payment”. It is not cancelled automatically.
Emails do not arrive
| Cause | Fix |
|---|---|
| Booking emails is off | Switch it on under Settings -> Notifications. Off stops every email the plugin sends. |
| The site cannot send mail | The plugin hands emails to WordPress. If other WordPress emails, such as password resets, do not arrive either, set up an SMTP plugin. |
| The admin copy goes missing | Admin notification recipients holds an address that is not valid, or is empty and the site’s admin email is wrong. |
| The From email is on another domain | Many mail servers reject mail claiming to be from a domain the site may not send for. Use an address on your own domain. |
| A booking made in the admin sent nothing | Only bookings made through the wizard send the confirmation and admin emails. |
| No email on a status change | A status email is sent only when the status actually changes, and only to the customer. |
See Emails.
The admin
The menu entry is missing
Plugixa Chauffeur appears only for users with the plugixa_chauffeur_manage
capability. Activation gives it to administrators. For another role, add the
capability with a role editor plugin.
Settings will not load or save for a non-administrator
The Settings screen needs the WordPress manage_options capability on top of
the plugin’s own. A booking manager without it gets “Administrator access
required.” from the server and “Failed to save settings” on screen. This is
intended.
“Could not delete. Please try again.”
Deleting needs the plugixa_chauffeur_delete capability as well as
plugixa_chauffeur_manage. A role with only the second can create and edit but
not delete; the server answers “You do not have permission to delete this
item.”
A Pro screen is missing
Drivers, Pricing Rules, Routes, Reports, the Invoice button and the Invoice settings tab exist only when the Pro edition is installed. There is no licence switch that hides them. See Free vs Pro.
The invoice says “You are not allowed to view this invoice.”
You are not logged in in that browser, or your account lacks the capability the invoice requires. See Invoices.
Things version 1.0.0 does not do
These come up as bug reports but are features the code does not have.
| Expectation | What actually happens |
|---|---|
| The distance is calculated from the addresses | The customer types the distance. The Google Maps API key is stored but not used, and there is no map. |
| Customers can cancel from a link in their email | The emails contain no such link. Cancel a booking by changing its status in the admin. |
| The wizard asks for a return date and time | Choosing Return doubles the distance cost. No return time is collected. |
| Customers pick a pickup point from the saved locations | The wizard’s pickup and drop-off fields are free text. |
| Default booking status makes new bookings start as Processing | Wizard bookings always start as Pending. |
| Currency position, Date format and Time format change how things are shown | They are stored but not applied. |
| Vehicles and forms can be translated per language | Content is stored once. See Multilingual. |
Still stuck
Turn on WP_DEBUG and WP_DEBUG_LOG in wp-config.php and repeat the action.
A feature module that fails to start is reported in the debug log with the
prefix [Plugixa Chauffeur]. The browser’s network panel shows the exact answer
of each REST request, including the message the server gave.