{"id":321029,"date":"2026-06-12T20:31:19","date_gmt":"2026-06-12T20:31:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/booking-light\/"},"modified":"2026-06-12T20:30:44","modified_gmt":"2026-06-12T20:30:44","slug":"whenpilot","status":"publish","type":"plugin","link":"https:\/\/dzo.wordpress.org\/plugins\/whenpilot\/","author":18333240,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.4","stable_tag":"1.0.4","tested":"7.0","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"WhenPilot","header_author":"Helene \u00c5sheim Gr\u00f8nberg","header_description":"A simple, self-hosted appointment booking system: define services and weekly opening hours, let visitors pick a free time slot with the [whenpilot] shortcode, prevent double-bookings, and manage everything from an admin inbox with email confirmations. No third-party service.","assets_banners_color":"182638","last_updated":"2026-06-12 20:30:44","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/whenpilot\/","header_author_uri":"https:\/\/helene.cloud","rating":0,"author_block_rating":0,"active_installs":0,"downloads":53,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.4":{"tag":"1.0.4","author":"helenegr1989","date":"2026-06-12 20:30:44"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3570515,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3570515,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3570515,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3570515,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3570515,"resolution":"1","location":"assets","locale":"","width":1707,"height":823},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3570515,"resolution":"2","location":"assets","locale":"","width":1710,"height":736},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3570515,"resolution":"3","location":"assets","locale":"","width":1300,"height":835},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3570515,"resolution":"4","location":"assets","locale":"","width":1735,"height":483}},"screenshots":{"1":"The booking form on the front-end with the inline month calendar \u2014 visitors pick a date, then a free time slot.","2":"The customer fills in name, email and an optional note before confirming the booking.","3":"Admin inbox showing pending, confirmed and cancelled bookings with one-click status changes.","4":"Service and weekly opening hours configuration in the admin settings."}},"plugin_section":[],"plugin_tags":[8132,269,416,1475,268],"plugin_category":[40],"plugin_contributors":[265195],"plugin_business_model":[],"class_list":["post-321029","plugin","type-plugin","status-publish","hentry","plugin_tags-appointments","plugin_tags-booking","plugin_tags-calendar","plugin_tags-reservations","plugin_tags-scheduling","plugin_category-calendar-and-events","plugin_contributors-helenegr1989","plugin_committers-helenegr1989"],"banners":{"banner":"https:\/\/ps.w.org\/whenpilot\/assets\/banner-772x250.png?rev=3570515","banner_2x":"https:\/\/ps.w.org\/whenpilot\/assets\/banner-1544x500.png?rev=3570515","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/whenpilot\/assets\/icon-128x128.png?rev=3570515","icon_2x":"https:\/\/ps.w.org\/whenpilot\/assets\/icon-256x256.png?rev=3570515","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/whenpilot\/assets\/screenshot-1.png?rev=3570515","caption":"The booking form on the front-end with the inline month calendar \u2014 visitors pick a date, then a free time slot."},{"src":"https:\/\/ps.w.org\/whenpilot\/assets\/screenshot-2.png?rev=3570515","caption":"The customer fills in name, email and an optional note before confirming the booking."},{"src":"https:\/\/ps.w.org\/whenpilot\/assets\/screenshot-3.png?rev=3570515","caption":"Admin inbox showing pending, confirmed and cancelled bookings with one-click status changes."},{"src":"https:\/\/ps.w.org\/whenpilot\/assets\/screenshot-4.png?rev=3570515","caption":"Service and weekly opening hours configuration in the admin settings."}],"raw_content":"<!--section=description-->\n<p>WhenPilot is a lightweight appointment booking plugin for small businesses \u2014 salons, clinics, consultants, tutors. Everything stays on your own site; there is no third-party booking service.<\/p>\n\n<p><strong>Features<\/strong><\/p>\n\n<ul>\n<li>Define <strong>services<\/strong> (name, duration, optional price, description).<\/li>\n<li>Set your <strong>weekly opening hours<\/strong> in a simple text format (e.g. <code>Mo-Fr 09:00-17:00<\/code>).<\/li>\n<li>Visitors book with the <code>[whenpilot]<\/code> shortcode: pick a service, a date, and a <strong>free time slot<\/strong> computed from your hours and existing bookings.<\/li>\n<li><strong>Double-booking prevention<\/strong>: slots are re-validated on the server before saving, with a configurable capacity (e.g. number of staff).<\/li>\n<li><strong>Admin inbox<\/strong>: see upcoming\/pending\/confirmed\/cancelled bookings, confirm, cancel or delete.<\/li>\n<li><strong>Email confirmations<\/strong> to the customer and a notification to you, plus emails when you confirm or cancel.<\/li>\n<li>Configurable lead time, how far ahead people can book, currency label and an optional auto-confirm.<\/li>\n<li>Uses your site's timezone. Works with any theme.<\/li>\n<\/ul>\n\n<p><strong>Usage:<\/strong> create a page, add the shortcode <code>[whenpilot]<\/code>, and publish.<\/p>\n\n<p>All features described above are fully functional in this plugin \u2014 no time limits, no usage caps, no locked options. WhenPilot does not connect to any external service. A separately distributed companion plugin offers additional features (multiple staff\/resources with custom fields, automatic email reminders) but is not required for the plugin to work.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>Bookings (name, email, optional phone and notes) are stored in your own database and emailed to you and the customer. No data is sent to any third party.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>whenpilot<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the zip via Plugins \u2192 Add New \u2192 Upload.<\/li>\n<li>Activate the plugin (this creates the tables and a sample service).<\/li>\n<li>Go to Bookings \u2192 Services to add your services, and Bookings \u2192 Settings for your hours.<\/li>\n<li>Add <code>[whenpilot]<\/code> to a page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20two%20people%20book%20the%20same%20time%3F\"><h3>Can two people book the same time?<\/h3><\/dt>\n<dd><p>Only up to the capacity you set (default 1). Slots are re-checked on the server at the moment of booking, so overlaps are prevented.<\/p><\/dd>\n<dt id=\"does%20it%20support%20online%20payment%3F\"><h3>Does it support online payment?<\/h3><\/dt>\n<dd><p>Not in this version \u2014 it collects booking requests. You confirm them from the admin inbox.<\/p><\/dd>\n<dt id=\"which%20timezone%20is%20used%3F\"><h3>Which timezone is used?<\/h3><\/dt>\n<dd><p>Your WordPress site timezone (Settings \u2192 General).<\/p><\/dd>\n<dt id=\"is%20there%20a%20paid%20version%3F\"><h3>Is there a paid version?<\/h3><\/dt>\n<dd><p>WhenPilot Pro adds unlimited services, capacity greater than 1, multiple staff\/resources, custom form fields and automatic email reminders. The free version on this page is fully functional for a single service and is not time-limited.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Renamed the plugin from \"Booking Light\" to \"WhenPilot\" with new slug <code>whenpilot<\/code>.<\/li>\n<li>Removed all artificial feature caps: unlimited services and capacity above 1 are now fully available out of the box.<\/li>\n<li>Lowered the top-level admin menu position (70) so the plugin no longer competes with core WordPress menu items.<\/li>\n<li>Internal cleanup: all prefixes, hooks, options, table names, shortcode and class names updated to the new name.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Hardening: all custom-table queries now use <code>$wpdb-&gt;prepare()<\/code> with the <code>%i<\/code> identifier placeholder for table names, and <code>$wpdb-&gt;insert\/update\/delete<\/code> calls are marked with explicit phpcs:ignore comments. No functional changes.<\/li>\n<li>Bumped minimum WordPress version to 6.2 (required by the <code>%i<\/code> placeholder).<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fixed: calendar weekday columns could be misaligned when the site's \"Week starts on\" was not Sunday.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>New: the booking form now uses an inline month calendar to pick the date (closed days and past dates are greyed out) instead of a plain date field.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release: services, weekly hours, free-slot booking form, double-booking prevention, admin inbox and email confirmations.<\/li>\n<\/ul>","raw_excerpt":"Self-hosted appointment booking: services, weekly hours, free-slot picking, double-booking prevention and email confirmations.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/dzo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/321029","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dzo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/dzo.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/dzo.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=321029"}],"author":[{"embeddable":true,"href":"https:\/\/dzo.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/helenegr1989"}],"wp:attachment":[{"href":"https:\/\/dzo.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=321029"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/dzo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=321029"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/dzo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=321029"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/dzo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=321029"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/dzo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=321029"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/dzo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=321029"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}