{"id":373146,"date":"2026-09-22T13:07:18","date_gmt":"2026-09-22T13:07:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sbf-simple-booking-form\/"},"modified":"2026-10-07T10:11:46","modified_gmt":"2026-10-07T10:11:46","slug":"prenoteca-booking","status":"publish","type":"plugin","link":"https:\/\/ca.wordpress.org\/plugins\/prenoteca-booking\/","author":14760348,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.1","stable_tag":"2.0.1","tested":"7.1.3","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"Prenoteca \u2013 Booking Requests","header_author":"Luca Borghese","header_description":"Lightweight booking requests: a front-end form and a back-end list. Everything you need, nothing you do not.","assets_banners_color":"c1dbe8","last_updated":"2026-10-07 10:11:46","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/prenoteca.lucaborghese.it\/","header_author_uri":"https:\/\/lucaborghese.it","rating":0,"author_block_rating":0,"active_installs":0,"downloads":247,"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":"lucaborghy","date":"2026-09-22 13:06:42","revision":3707387},"2.0.0":{"tag":"2.0.0","author":"lucaborghy","date":"2026-10-06 13:42:25","revision":3730922},"2.0.1":{"tag":"2.0.1","author":"lucaborghy","date":"2026-10-07 10:11:46","revision":3732325}},"upgrade_notice":{"2.0.1":"<p>Adds a cancellation email to the customer, stricter phone validation and a limit on repeated booking requests to reduce spam.<\/p>","2.0.0":"<p>Adds bookable services, booking statuses, a cancellation link, customisable emails and booking time limits. Recommended for all sites.<\/p>","1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3707484,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3707484,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3707468,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3707468,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","2.0.0","2.0.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Front-end booking form","2":"Booking list in the dashboard","3":"Settings page"}},"plugin_section":[],"plugin_tags":[8132,269,361,722,4062],"plugin_category":[40,42],"plugin_contributors":[282056],"plugin_business_model":[],"class_list":["post-373146","plugin","type-plugin","status-publish","hentry","plugin_tags-appointments","plugin_tags-booking","plugin_tags-form","plugin_tags-reservation","plugin_tags-schedule","plugin_category-calendar-and-events","plugin_category-contact-forms","plugin_contributors-lucaborghy","plugin_committers-lucaborghy"],"banners":{"banner":"https:\/\/ps.w.org\/prenoteca-booking\/assets\/banner-772x250.png?rev=3707468","banner_2x":"https:\/\/ps.w.org\/prenoteca-booking\/assets\/banner-1544x500.png?rev=3707468","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/prenoteca-booking\/assets\/icon-128x128.png?rev=3707484","icon_2x":"https:\/\/ps.w.org\/prenoteca-booking\/assets\/icon-256x256.png?rev=3707484","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Prenoteca adds a booking request form to any page through a shortcode, and a simple list in your dashboard to manage what comes in. No account, no external service, no calendar sync you did not ask for.<\/p>\n\n<p>It is built for the case most sites actually have: let people ask for an appointment, get notified, keep a record.<\/p>\n\n<p>Good for:<\/p>\n\n<ul>\n<li>professional practices<\/li>\n<li>beauty salons and barbers<\/li>\n<li>consultants and freelancers<\/li>\n<li>small businesses taking appointments<\/li>\n<\/ul>\n\n<p>What it does:<\/p>\n\n<ul>\n<li>Responsive booking form, added with a shortcode<\/li>\n<li>Booking list in the dashboard, filterable by date<\/li>\n<li>CSV export of the bookings you filtered<\/li>\n<li>Email notification to the site administrator<\/li>\n<li>Optional confirmation email to the customer<\/li>\n<li>Notifications page to customise every email subject and text, with placeholders<\/li>\n<li>Available times added one at a time from the settings page<\/li>\n<li>Optional booking statuses (new, confirmed, completed, cancelled), managed from the booking list; cancelled bookings free their time slot<\/li>\n<li>Optional cancellation link in the customer email: a personal, token-protected link to cancel the booking<\/li>\n<li>Optional minimum notice: set how far in advance (minutes, hours or days) a booking must be made<\/li>\n<li>Optional maximum booking window: set how far ahead (minutes, hours or days) customers can book<\/li>\n<li>Closing days: calendar dates on which bookings are not accepted<\/li>\n<li>No double bookings: times already taken are disabled in the form, accounting for service duration and breaks<\/li>\n<li>Daily booking limit<\/li>\n<li>Works with the WordPress privacy tools: personal data export and erasure, and suggested privacy policy text<\/li>\n<li>Optional \"Book Services\": let customers pick a service (duration, break, short description, optional price), managed from the dashboard<\/li>\n<\/ul>\n\n<p>No external dependencies and no bloat. Only what you really need.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>prenoteca-booking<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the plugin through the Plugins screen.<\/li>\n<li>Activate the plugin through the \"Plugins\" screen in WordPress.<\/li>\n<li>Go to <strong>Bookings \u2192 Settings<\/strong> to configure available times and limits.<\/li>\n<li>Add the form to a published page with the shortcode: <code>[prenoteca_booking_form]<\/code><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20should%20i%20place%20the%20form%3F\"><h3>Where should I place the form?<\/h3><\/dt>\n<dd><p>In a published page, using the <code>[prenoteca_booking_form]<\/code> shortcode. The cancellation link in the customer email leads back to that page, which shows the cancellation request in place of the form. Do not place the form in widgets, archives or theme templates: there the link falls back to the home page, where customers cannot cancel unless the home page also shows the form. Keep the page published while bookings are active, otherwise links already sent will stop working.<\/p><\/dd>\n<dt id=\"can%20i%20customise%20the%20form%3F\"><h3>Can I customise the form?<\/h3><\/dt>\n<dd><p>You can change its look with CSS from your theme: the form and its main elements have classes and IDs starting with <code>prenoteca<\/code> (for example <code>.prenoteca-form<\/code>, <code>.prenoteca-btn<\/code> and <code>#prenoteca_name<\/code>). Email texts can be edited from <strong>Bookings \u2192 Notifications<\/strong>. Editing the plugin files is not recommended, because changes are lost when the plugin is updated.<\/p><\/dd>\n<dt id=\"can%20i%20add%20custom%20fields%3F\"><h3>Can I add custom fields?<\/h3><\/dt>\n<dd><p>Not from the settings. Custom fields require editing the form template and the code that validates and saves the booking (<code>includes\/class-prenoteca-frontend.php<\/code>), and changes to the plugin files are lost when the plugin is updated.<\/p><\/dd>\n<dt id=\"are%20the%20emails%20customisable%3F\"><h3>Are the emails customisable?<\/h3><\/dt>\n<dd><p>Yes. Go to <strong>Bookings \u2192 Notifications<\/strong> to edit the subject and text of every email. Placeholders such as <code>{nome}<\/code>, <code>{data}<\/code> and <code>{ora}<\/code> are replaced with the booking details, and a button restores the default text.<\/p><\/dd>\n<dt id=\"how%20do%20i%20offer%20bookable%20services%3F\"><h3>How do I offer bookable services?<\/h3><\/dt>\n<dd><p>Enable <strong>Book Services<\/strong> in <strong>Bookings \u2192 Settings<\/strong>. A <strong>Services<\/strong> menu appears where you manage the list; the form then asks the customer to pick one. Each booking keeps a copy of the service name and duration, so your history stays accurate even if you later edit or delete the service. Disabling the option hides the field from the form.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20services%20created%20on%20first%20activation%3F\"><h3>Can I change the services created on first activation?<\/h3><\/dt>\n<dd><p>Yes, with the <code>prenoteca_default_services<\/code> filter, before you enable the option for the first time:<\/p>\n\n<pre><code>add_filter( 'prenoteca_default_services', function () {\n    return array(\n        array( 'nome' =&gt; 'Taglio', 'durata_min' =&gt; 30, 'pausa_tra_appuntamenti' =&gt; 10, 'attivo' =&gt; 'si', 'descrizione_breve' =&gt; 'Lavaggio incluso', 'prezzo' =&gt; '25' ),\n    );\n} );\n<\/code><\/pre><\/dd>\n<dt id=\"can%20i%20change%20the%20anti-spam%20limit%3F\"><h3>Can I change the anti-spam limit?<\/h3><\/dt>\n<dd><p>By default the form accepts at most 3 booking requests per hour from the same IP address; administrators are not limited. You can change the number, or set it to 0 to turn the limit off:<\/p>\n\n<pre><code>add_filter( 'prenoteca_rate_limit', function () {\n    return 5;\n} );\n<\/code><\/pre>\n\n<p>The time window is set with the <code>prenoteca_rate_limit_period<\/code> filter, in seconds.<\/p><\/dd>\n<dt id=\"where%20are%20the%20bookings%20stored%3F\"><h3>Where are the bookings stored?<\/h3><\/dt>\n<dd><p>In a dedicated database table, <code>wp_prenoteca_bookings<\/code>. Uninstalling the plugin drops that table and removes its options.<\/p><\/dd>\n<dt id=\"does%20it%20send%20data%20anywhere%3F\"><h3>Does it send data anywhere?<\/h3><\/dt>\n<dd><p>No. Everything stays on your site.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20use%20cookies%3F\"><h3>Does the plugin use cookies?<\/h3><\/dt>\n<dd><p>Only one technical cookie, and only when a customer opens the cancellation link from their email. The cookie (<code>prenoteca_cancel_<\/code> followed by the booking ID) temporarily stores the cancellation token, so the token can be removed from the page address. It expires after 30 minutes, is deleted once the booking is cancelled, and is not used for tracking. Visitors who only use the booking form receive no cookies from the plugin.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Customer email when the administrator cancels a booking (if \"Send a confirmation to the customer\" is enabled), editable from Notifications<\/li>\n<li>Phone field accepts only numbers, spaces and the characters + - \/ ( )<\/li>\n<li>Minimum notice or maximum booking window set to 0: the option is now turned off with a notice, instead of showing the default value<\/li>\n<li>The default subject of the \"booking received\" email to the customer is now \"Prenotazione ricevuta\", so it is not mistaken for the confirmation email<\/li>\n<li>Anti-spam: at most 3 booking requests per hour from the same IP address (adjustable with the <code>prenoteca_rate_limit<\/code> and <code>prenoteca_rate_limit_period<\/code> filters; administrators are not limited)<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Book Services: customers pick a service with duration, break, short description and optional price<\/li>\n<li>Booking statuses: new, confirmed, completed, cancelled, with an email to the customer on confirmation<\/li>\n<li>Cancellation link in the customer email, protected by a personal token<\/li>\n<li>Notifications page to customise every email subject and text, with placeholders<\/li>\n<li>Minimum notice and maximum booking window<\/li>\n<li>Closing days<\/li>\n<li>No double bookings: taken times are disabled in the form, accounting for service duration and breaks<\/li>\n<li>\"Upcoming\" and \"Today\" views in the booking list, sorted by date and time<\/li>\n<li>Paginated booking list, with the total number of bookings<\/li>\n<li>CSV export follows the active filters (dates, status, \"Upcoming\" and \"Today\" views), with no row limit<\/li>\n<li>Dates shown as dd-mm-yyyy with a date picker<\/li>\n<li>Clear error messages in the form, with the entered data kept so customers can correct it<\/li>\n<li>Works with page caching: the form security token is refreshed automatically<\/li>\n<li>A booking is confirmed and emailed only after it has been saved<\/li>\n<li>Personal data export and erasure through the WordPress privacy tools; erased bookings are anonymised, upcoming active bookings are kept until cancelled<\/li>\n<li>Suggested privacy policy text under Settings \u2192 Privacy<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First stable release<\/li>\n<li>Front-end booking form<\/li>\n<li>Booking management in the dashboard<\/li>\n<li>CSV export<\/li>\n<li>Administrator and customer emails<\/li>\n<li>Plugin settings<\/li>\n<li>Daily limit<\/li>\n<li>Configurable available times<\/li>\n<\/ul>","raw_excerpt":"Everything you need to collect and manage booking requests on your site, without the weight of a full booking system.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/373146","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=373146"}],"author":[{"embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/lucaborghy"}],"wp:attachment":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=373146"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=373146"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=373146"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=373146"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=373146"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=373146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}