{"id":324416,"date":"2026-06-15T07:41:48","date_gmt":"2026-06-15T07:41:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/slashbooking\/"},"modified":"2026-06-15T09:24:45","modified_gmt":"2026-06-15T09:24:45","slug":"slashbooking","status":"publish","type":"plugin","link":"https:\/\/hr.wordpress.org\/plugins\/slashbooking\/","author":23514111,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.5","stable_tag":"1.0.5","tested":"7.0","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"SlashBooking","header_author":"SlashBooking","header_description":"Online appointment booking for WordPress: a real-time public calendar via shortcode, with one-click email confirmation. Self-hosted and GDPR-friendly.","assets_banners_color":"06996b","last_updated":"2026-06-15 09:24:45","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/slashbooking.fr\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":36,"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":"slashbooking","date":"2026-06-15 07:41:23"},"1.0.5":{"tag":"1.0.5","author":"slashbooking","date":"2026-06-15 09:24:45"}},"upgrade_notice":{"1.0.5":"<p>Adds a full French translation and switches the source language to English (en_US) so the plugin can be translated into any language on WordPress.org.<\/p>","1.0.4":"<p>The free edition no longer bundles Cloudflare Turnstile and is now fully self-contained (no external services). Honeypot + rate limiting still protect the form.<\/p>","1.0.3":"<p>Code-quality hardening to pass the full WordPress.org Plugin Check ruleset. No functional changes.<\/p>","1.0.2":"<p>Naming-convention compliance for the WordPress.org review (unique <code>slashbooking_<\/code> prefix on all option names).<\/p>","1.0.1":"<p>Compliance and best-practice fixes for the WordPress.org review.<\/p>","1.0.0":"<p>First public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3572587,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3572587,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3572587,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3572587,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3572587,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.4","1.0.5"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[262246],"plugin_tags":[276,269,416,1475,268],"plugin_category":[40],"plugin_contributors":[267172],"plugin_business_model":[],"class_list":["post-324416","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-appointment","plugin_tags-booking","plugin_tags-calendar","plugin_tags-reservations","plugin_tags-scheduling","plugin_category-calendar-and-events","plugin_contributors-slashbooking","plugin_committers-slashbooking"],"banners":{"banner":"https:\/\/ps.w.org\/slashbooking\/assets\/banner-772x250.png?rev=3572587","banner_2x":"https:\/\/ps.w.org\/slashbooking\/assets\/banner-1544x500.png?rev=3572587","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/slashbooking\/assets\/icon.svg?rev=3572587","icon":"https:\/\/ps.w.org\/slashbooking\/assets\/icon.svg?rev=3572587","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>SlashBooking<\/strong> turns any WordPress page into a self-service appointment funnel. A visitor picks a service, sees the available slots in real time, and books in under a minute. You receive an email alert and confirm or decline in one click \u2014 no need to log in to WordPress, no third-party SaaS, no recurring fees.<\/p>\n\n<p>It is a self-hosted scheduling tool: your data stays in your WordPress database.<\/p>\n\n<h4>Main features<\/h4>\n\n<ul>\n<li><strong>Public booking form via shortcode<\/strong> \u2014 A single <code>[slashbooking]<\/code> in any page. Multiple services, date picker, real-time slots, customer form, fully responsive.<\/li>\n<li><strong>One-click email confirmation<\/strong> \u2014 Every request arrives with two buttons, <em>Confirm<\/em> and <em>Decline<\/em>. No WordPress login required. The action links are signed with HMAC-SHA256 and cannot be forged.<\/li>\n<li><strong>Smart buffers around appointments<\/strong> \u2014 Configure padding (travel, prep) between appointments. Applied automatically.<\/li>\n<li><strong>Multi-slot opening hours<\/strong> \u2014 Monday 9\u201312 + 14\u201318, Tuesday morning only, Wednesday off\u2026 Each day and each service is configured independently.<\/li>\n<li><strong>Transactional emails with .ics<\/strong> \u2014 Confirmation, decline and acknowledgement emails, each with an automatic <code>.ics<\/code> attachment so the customer adds the appointment to their calendar in one click.<\/li>\n<li><strong>Built-in GDPR compliance<\/strong> \u2014 Explicit consent before submission, WP_Privacy exporters\/erasers, configurable retention, automatic anonymisation.<\/li>\n<li><strong>Built-in anti-spam<\/strong> \u2014 Honeypot and per-IP rate limiting, with no third-party service and no external request.<\/li>\n<\/ul>\n\n<h4>Who it is for<\/h4>\n\n<ul>\n<li>Freelancers and small businesses who want a self-hosted scheduling page<\/li>\n<li>Agencies packaging a website with a booking funnel<\/li>\n<li>Any business where \"book a slot\" opens the customer journey<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin is fully self-contained. It makes no calls to any external or third-party service and sends no data off your site \u2014 every request is handled on your own WordPress installation.<\/p>\n\n<h3>Source code and build<\/h3>\n\n<p>The full, human-readable source code is public and maintained at:<\/p>\n\n<p>https:\/\/github.com\/ArchSeraphin\/slashbooking-lite<\/p>\n\n<p>The PHP runs unmodified from <code>src\/<\/code>. The admin interface bundle\n(<code>assets\/dist\/index.jsx.js<\/code> and <code>.css<\/code>) is compiled from the React\/SCSS sources\nin <code>src\/Admin\/react-app\/src\/<\/code>, which ship inside the plugin ZIP as well.<\/p>\n\n<p>To regenerate the compiled admin assets:<\/p>\n\n<pre><code>npm install\nnpm run build   (uses @wordpress\/scripts \u2014 webpack\/Babel; outputs to assets\/dist\/)\n<\/code><\/pre>\n\n<p>The Composer autoloader in <code>vendor\/<\/code> is generated with <code>composer install --no-dev<\/code>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the ZIP via <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong> (or unzip it into <code>wp-content\/plugins\/<\/code>).<\/li>\n<li>Activate <strong>SlashBooking<\/strong> in the plugins list.<\/li>\n<li>Configure it from the <strong>SlashBooking<\/strong> admin menu:\n\n<ul>\n<li><strong>Services<\/strong> \u2014 appointment duration, before\/after buffers, days and opening hours, display colour<\/li>\n<li><strong>Settings<\/strong> \u2014 booking form colours, consent message, GDPR retention, notification email<\/li>\n<\/ul><\/li>\n<li>Paste <code>[slashbooking]<\/code> into any public page to display the booking form.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20emails%20get%20sent%3F\"><h3>How do emails get sent?<\/h3><\/dt>\n<dd><p>By default via <code>wp_mail()<\/code>. If you have an SMTP plugin installed (WP Mail SMTP, FluentSMTP, etc.), SlashBooking uses it automatically \u2014 no extra configuration.<\/p><\/dd>\n<dt id=\"is%20a%20customer%20account%20required%20to%20book%3F\"><h3>Is a customer account required to book?<\/h3><\/dt>\n<dd><p>No. Visitors book without creating an account. You collect only the fields you need (name, email, phone, etc.).<\/p><\/dd>\n<dt id=\"is%20it%20gdpr%20compliant%3F\"><h3>Is it GDPR compliant?<\/h3><\/dt>\n<dd><p>Yes. The form requires explicit consent, the plugin registers WordPress privacy data exporters and erasers, supports a configurable retention period, and anonymises old bookings automatically.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20page%20caching%20plugins%3F\"><h3>Does it work with page caching plugins?<\/h3><\/dt>\n<dd><p>Yes. The page that contains the widget is automatically excluded from page caching so the form keeps working.<\/p><\/dd>\n<dt id=\"does%20it%20survive%20a%20wordpress%20update%3F\"><h3>Does it survive a WordPress update?<\/h3><\/dt>\n<dd><p>Yes. Database schemas are versioned and migrated automatically, and options are preserved.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.5<\/h4>\n\n<ul>\n<li><strong>Internationalization.<\/strong> The plugin's source strings are now in English (<code>en_US<\/code>) \u2014 the standard base locale for WordPress.org \u2014 and a complete <strong>French (<code>fr_FR<\/code>)<\/strong> translation ships with the plugin, covering the admin, the transactional emails, the public booking form and the settings app. The plugin can now be translated into any language via translate.wordpress.org.<\/li>\n<li>Updated the bundled plugin logo to the current SlashBooking calendar mark.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Removed the optional Cloudflare Turnstile integration from the free edition. The plugin now makes <strong>no external requests<\/strong> and connects to <strong>no third-party service<\/strong> \u2014 it is fully self-contained. The built-in honeypot and per-IP rate limiting continue to protect the booking form.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Hardened the code against the full WordPress.org Plugin Check ruleset: documented the trusted, prepared database queries in the data-access layer; annotated internal exception messages (caught\/converted, never displayed); renamed the internal action hooks to an underscore prefix (<code>slashbooking_booking_*<\/code>); prefixed the loader variable in the main file; and documented the standard cache constant\/hook and the opt-in Cloudflare Turnstile widget script (the one permitted external service).<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Renamed all plugin option names, the custom cron schedule and the rate-limit transient keys from the short <code>sb_<\/code> prefix to the unique <code>slashbooking_<\/code> prefix, to prevent collisions with other plugins or themes.<\/li>\n<li>Replaced the example logo-URL placeholder in the email settings (it was an <code>https:\/\/\u2026\/logo.png<\/code> string that a code scan could mistake for a remotely loaded file) with a plain text hint. The plugin never loaded that URL; it was only placeholder text inside a URL input the admin fills in.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Public booking widget and dashboard widget styles are now enqueued (no inline <code>&lt;style&gt;<\/code>).<\/li>\n<li>The <code>.ics<\/code> calendar attachment is written to a hardened uploads subfolder instead of the system temp directory, and removed right after sending.<\/li>\n<li>Shortcode output uses <code>esc_url()<\/code> for the REST URL attribute.<\/li>\n<li>Admin menu moved to a lower position so it no longer sits among core items.<\/li>\n<li>Removed the redundant <code>load_plugin_textdomain()<\/code> call (translations load automatically on WordPress.org).<\/li>\n<li>Documented the public source repository and admin-bundle build steps; the React\/SCSS sources now ship in the plugin.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<p>First public release: shortcode booking form with real-time availability, one-click signed email confirmation (Confirm\/Decline), <code>.ics<\/code> attachments, per-service opening hours and buffers, GDPR exporters\/erasers and retention, honeypot + rate limiting, and optional Cloudflare Turnstile.<\/p>","raw_excerpt":"Self-hosted online appointment booking for WordPress: a real-time public calendar via shortcode, with one-click email confirmation.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/324416","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=324416"}],"author":[{"embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/slashbooking"}],"wp:attachment":[{"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=324416"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=324416"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=324416"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=324416"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=324416"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=324416"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}