{"id":324786,"date":"2026-06-20T14:30:59","date_gmt":"2026-06-20T14:30:59","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/clinicpress\/"},"modified":"2026-07-31T10:40:42","modified_gmt":"2026-07-31T10:40:42","slug":"alnora-clinic","status":"publish","type":"plugin","link":"https:\/\/ca.wordpress.org\/plugins\/alnora-clinic\/","author":23531648,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.8","stable_tag":"1.2.8","tested":"7.0.2","requires":"6.0","requires_php":"8.1","requires_plugins":null,"header_name":"Alnora - Booking for Private Clinics","header_author":"Alnoraclinic","header_description":"Appointment booking for private medical clinics \u2014 doctors, services, schedules, patient records and automated email notifications.","assets_banners_color":"0b4c5b","last_updated":"2026-07-31 10:40:42","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/alnora-booking.com","header_author_uri":"https:\/\/alnora-booking.com","rating":5,"author_block_rating":0,"active_installs":0,"downloads":609,"num_ratings":1,"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":"alnoraclinic","date":"2026-06-20 14:30:21"},"1.1.0":{"tag":"1.1.0","author":"alnoraclinic","date":"2026-06-20 22:44:29"},"1.1.1":{"tag":"1.1.1","author":"alnoraclinic","date":"2026-06-21 06:07:12"},"1.2.0":{"tag":"1.2.0","author":"alnoraclinic","date":"2026-06-21 10:15:37"},"1.2.1":{"tag":"1.2.1","author":"alnoraclinic","date":"2026-06-25 07:49:17"},"1.2.2":{"tag":"1.2.2","author":"alnoraclinic","date":"2026-06-30 14:09:02"},"1.2.3":{"tag":"1.2.3","author":"alnoraclinic","date":"2026-06-30 14:09:02"},"1.2.4":{"tag":"1.2.4","author":"alnoraclinic","date":"2026-07-11 16:30:29"},"1.2.5":{"tag":"1.2.5","author":"alnoraclinic","date":"2026-07-11 20:43:22"},"1.2.6":{"tag":"1.2.6","author":"alnoraclinic","date":"2026-07-12 21:26:12"},"1.2.7":{"tag":"1.2.7","author":"alnoraclinic","date":"2026-07-17 06:50:45"},"1.2.8":{"tag":"1.2.8","author":"alnoraclinic","date":"2026-07-31 10:40:42"}},"upgrade_notice":{"1.2.8":"<p>Cosmetic refresh: the per-doctor colour picker is removed and doctors now use the Alnora brand colour, and the settings on\/off options are shown as branded toggle switches. No database or configuration changes.<\/p>","1.2.6":"<p>Fixes a misleading message on the booking form when a doctor has no services assigned. No database or configuration changes.<\/p>","1.2.5":"<p>Big update: categories for doctors and services, rich service descriptions with a &quot;Read more&quot; popup, per-service &quot;Offered by&quot; doctors, admin search, optional GDPR auto-deletion of inactive patients, an appointment details popup, WordPress date\/time formats and the clinic timezone on the booking form. Your data is preserved; new tables and columns are created automatically.<\/p>","1.2.4":"<p>Adds an optional Alnora Pro upgrade path via Freemius (usage tracking is opt-in). Pre-selecting a doctor\/service through shortcode attributes has moved to Alnora Pro.<\/p>","1.2.3":"<p>Security hardening for the public booking endpoints, plus completed translations for all 13 languages. Recommended for all users.<\/p>","1.2.2":"<p>Important data-safety fix: your data is now preserved when the plugin is deleted (removed only if you opt in). Recommended for all users.<\/p>","1.2.1":"<p>Adds built-in translations for the booking form and patient emails in 13 languages, and fixes a booking error caused by duplicate reference numbers.<\/p>","1.2.0":"<p>Adds patient self-cancellation links in booking emails and a minimum cancellation notice setting.<\/p>","1.1.1":"<p>Fixes a permissions error when opening some settings sub-pages. Recommended for all 1.1.0 users.<\/p>","1.1.0":"<p>Adds search to the Appointments and Patients lists, a past-appointments filter, faster admin rendering, and status help. No database or configuration changes.<\/p>","1.0.0":"<p>Initial release \u2014 no upgrade steps required.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3579856,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3579856,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3623206,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3623197,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"alnora-clinic\/booking-form":{"name":"alnora-clinic\/booking-form","title":"Alnora Booking"}},"tagged_versions":["1.0.0","1.1.0","1.1.1","1.2.0","1.2.1","1.2.2","1.2.3","1.2.4","1.2.5","1.2.6","1.2.7","1.2.8"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3579856,"resolution":"1","location":"assets","locale":"","width":1809,"height":881},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3579856,"resolution":"2","location":"assets","locale":"","width":1807,"height":884},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3579856,"resolution":"3","location":"assets","locale":"","width":1822,"height":839},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3579856,"resolution":"4","location":"assets","locale":"","width":1824,"height":851},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3579856,"resolution":"5","location":"assets","locale":"","width":1825,"height":846},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3579990,"resolution":"6","location":"assets","locale":"","width":1038,"height":573},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3579990,"resolution":"7","location":"assets","locale":"","width":1032,"height":646},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3579990,"resolution":"8","location":"assets","locale":"","width":1028,"height":801},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3579990,"resolution":"9","location":"assets","locale":"","width":1030,"height":840}},"screenshots":{"1":"The multi-step booking wizard as patients see it on the front end.","2":"The appointments list with inline status control.","3":"The doctor profile editor with working hours and break configuration.","4":"The dashboard with appointment stats at a glance.","5":"The settings screen with autosave."}},"plugin_section":[],"plugin_tags":[8133,43578,132491,10315,234510],"plugin_category":[40],"plugin_contributors":[268082],"plugin_business_model":[],"class_list":["post-324786","plugin","type-plugin","status-publish","hentry","plugin_tags-appointment-booking","plugin_tags-clinic","plugin_tags-doctor-appointment","plugin_tags-medical","plugin_tags-patient-management","plugin_category-calendar-and-events","plugin_contributors-alnoraclinic","plugin_committers-alnoraclinic","plugin_committers-alnoramanager"],"banners":{"banner":"https:\/\/ps.w.org\/alnora-clinic\/assets\/banner-772x250.png?rev=3623197","banner_2x":"https:\/\/ps.w.org\/alnora-clinic\/assets\/banner-1544x500.png?rev=3623206","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/alnora-clinic\/assets\/icon-128x128.png?rev=3579856","icon_2x":"https:\/\/ps.w.org\/alnora-clinic\/assets\/icon-256x256.png?rev=3579856","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/alnora-clinic\/assets\/screenshot-1.png?rev=3579856","caption":"The multi-step booking wizard as patients see it on the front end."},{"src":"https:\/\/ps.w.org\/alnora-clinic\/assets\/screenshot-2.png?rev=3579856","caption":"The appointments list with inline status control."},{"src":"https:\/\/ps.w.org\/alnora-clinic\/assets\/screenshot-3.png?rev=3579856","caption":"The doctor profile editor with working hours and break configuration."},{"src":"https:\/\/ps.w.org\/alnora-clinic\/assets\/screenshot-4.png?rev=3579856","caption":"The dashboard with appointment stats at a glance."},{"src":"https:\/\/ps.w.org\/alnora-clinic\/assets\/screenshot-5.png?rev=3579856","caption":"The settings screen with autosave."},{"src":"https:\/\/ps.w.org\/alnora-clinic\/assets\/screenshot-6.png?rev=3579990","caption":""},{"src":"https:\/\/ps.w.org\/alnora-clinic\/assets\/screenshot-7.png?rev=3579990","caption":""},{"src":"https:\/\/ps.w.org\/alnora-clinic\/assets\/screenshot-8.png?rev=3579990","caption":""},{"src":"https:\/\/ps.w.org\/alnora-clinic\/assets\/screenshot-9.png?rev=3579990","caption":""}],"raw_content":"<!--section=description-->\n<p><strong>Alnora is the all-in-one doctor appointment booking and clinic management plugin for WordPress \u2014 built exclusively for private medical practices.<\/strong><\/p>\n\n<p>Turn your WordPress site into a complete booking platform in minutes. Whether you're a solo practitioner or a busy multi-doctor, multi-location clinic \u2014 dentists, psychologists, physiotherapists, dermatologists, cosmetic clinics or GPs \u2014 Alnora gives your patients a beautiful, multi-step booking experience and gives your front desk one calm place to manage it all.<\/p>\n\n<p>No generic salon plugin bent into shape. No spreadsheets. No five add-ons duct-taped together. Just one focused product that understands doctors, services, patients and privacy.<\/p>\n\n<p>\ud83d\udc49 <a href=\"https:\/\/alnora-booking.com\/demo\/\">Live demo<\/a> \u00b7 <a href=\"https:\/\/alnora-booking.com\/pricing\/\">See Pro pricing<\/a> \u00b7 <a href=\"https:\/\/alnora-booking.com\/docs\/\">Documentation<\/a><\/p>\n\n<p><strong>Why private clinics choose Alnora<\/strong><\/p>\n\n<ul>\n<li>\ud83c\udfe5 <strong>Built for medicine, not retail.<\/strong> Every screen assumes doctors, services and patients \u2014 so setup is fast and nothing feels like a workaround.<\/li>\n<li>\ud83d\udd12 <strong>Your data stays yours.<\/strong> Everything runs on your own WordPress site and database. Patient contact details are encrypted at rest (AES-256).<\/li>\n<li>\ud83d\udee1\ufe0f <strong>GDPR-ready from day one.<\/strong> Consent is captured with a timestamp and IP, and inactive records can auto-delete on a schedule you choose.<\/li>\n<li>\ud83d\udc9a <strong>Free forever, unlimited.<\/strong> Unlimited doctors, services and bookings \u2014 no per-booking fees, no artificial caps.<\/li>\n<\/ul>\n\n<p>\ud83e\ude7a <strong>Free features \u2014 everything you need to start taking bookings<\/strong><\/p>\n\n<ul>\n<li><strong>Unlimited doctors<\/strong> \u2014 full profiles with photo, bio, email and per-doctor weekly working hours and breaks.<\/li>\n<li><strong>Unlimited services<\/strong> \u2014 rich descriptions with an optional \"Read more\" popup, plus duration, buffer time, price and colour.<\/li>\n<li><strong>\"Offered by\" control<\/strong> \u2014 assign each service to specific doctors, or leave it available to every doctor.<\/li>\n<li><strong>Doctor &amp; service categories<\/strong> \u2014 organise your team and your menu; doctor categories appear on the booking form.<\/li>\n<li><strong>Beautiful multi-step booking wizard<\/strong> \u2014 patients choose doctor \u2192 service \u2192 date &amp; time \u2192 details. Drop it anywhere with the <code>[alnora_booking]<\/code> shortcode or the Gutenberg block.<\/li>\n<li><strong>Smart availability engine<\/strong> \u2014 respects working hours, breaks, buffers, existing bookings and your booking window, so double-bookings simply can't happen.<\/li>\n<li><strong>Patient self-service cancellation<\/strong> \u2014 a secure link in every confirmation lets patients cancel within the notice period you set.<\/li>\n<li><strong>Encrypted patient records<\/strong> \u2014 email and phone encrypted at rest (AES-256) with a hashed lookup, all on your own server.<\/li>\n<li><strong>GDPR consent &amp; retention<\/strong> \u2014 timestamped consent with IP, plus optional automatic deletion of inactive records.<\/li>\n<li><strong>Automatic emails &amp; reminders<\/strong> \u2014 booking confirmations, clinic notifications, status updates and timed reminders, all sent for you.<\/li>\n<li><strong>A clean, branded admin<\/strong> \u2014 a stats dashboard, a searchable appointment list with inline status control and an at-a-glance details popup, plus doctor, service, patient and settings screens.<\/li>\n<li><strong>Dedicated clinic roles<\/strong> \u2014 built-in Clinic Doctor, Receptionist and Patient roles, so every team member signs in with the right level of access.<\/li>\n<li><strong>Works with your formats<\/strong> \u2014 dates, times and the clinic timezone follow your WordPress settings and show on the booking form.<\/li>\n<li><strong>13 built-in languages<\/strong> \u2014 set the patient-facing language independently of your site language (see below).<\/li>\n<li><strong>Developer-friendly<\/strong> \u2014 dependency-free vanilla JavaScript (no build step) and a REST API under the <code>alnora-clinic\/v1<\/code> namespace.<\/li>\n<\/ul>\n\n<p>\u2b50 <strong>Alnora Pro \u2014 turn booking into a complete clinic system<\/strong><\/p>\n\n<p>Upgrade to <a href=\"https:\/\/alnora-booking.com\/pricing\/\">Alnora Pro<\/a> and add everything a growing private practice needs:<\/p>\n\n<ul>\n<li>\ud83d\udcb3 <strong>Payments &amp; deposits<\/strong> \u2014 take card (Stripe) and PayPal payments at booking, require a deposit, and issue full or partial refunds \u2014 all inside WordPress.<\/li>\n<li>\u2709\ufe0f <strong>Email a payment link<\/strong> \u2014 send patients a secure link to pay a deposit, the balance or the full amount for phone and walk-in bookings, and it's marked paid automatically.<\/li>\n<li>\ud83e\uddfe <strong>Branded invoice PDFs<\/strong> \u2014 a professional, logo-headed invoice for every appointment, marked paid automatically.<\/li>\n<li>\ud83d\udd01 <strong>Recurring appointments &amp; waitlist<\/strong> \u2014 let patients book a whole course of visits in one step, and fill cancellations automatically.<\/li>\n<li>\ud83d\udd04 <strong>One-click rescheduling<\/strong> \u2014 move any booking to a new time; the patient is automatically re-notified and calendars and reminders update to match.<\/li>\n<li>\ud83d\udd14 <strong>SMS &amp; WhatsApp reminders<\/strong> \u2014 cut no-shows with automated text and WhatsApp messages (via Twilio), alongside email.<\/li>\n<li>\ud83d\udcc5 <strong>One-way calendar sync<\/strong> \u2014 push bookings to Google Calendar and Microsoft Outlook, with events removed automatically on cancellation.<\/li>\n<li>\ud83c\udfa5 <strong>Telehealth<\/strong> \u2014 auto-generate Zoom or Google Meet links for online consultations.<\/li>\n<li>\ud83d\uddc2\ufe0f <strong>Encrypted medical records<\/strong> \u2014 clinical notes with one-click prescription and diagnosis PDFs, in any language.<\/li>\n<li>\ud83d\udc64 <strong>Patient portal<\/strong> \u2014 patients log in to view, cancel, rebook and download their documents.<\/li>\n<li>\ud83d\udd11 <strong>Doctor self-service login<\/strong> \u2014 doctors sign in to a read-only view of their own profile, services and diary, seeing only their own appointments.<\/li>\n<li>\ud83d\udccd <strong>Multiple locations<\/strong> \u2014 run several branches, each with its own doctors, availability, photo and contact details.<\/li>\n<li>\ud83c\udfa8 <strong>Full branding &amp; templates<\/strong> \u2014 match the booking widget to your site and edit every email template.<\/li>\n<li>\u26a1 <strong>Automation &amp; reporting<\/strong> \u2014 Zapier webhooks, CSV import, revenue reports and a complete GDPR toolkit (export, erasure, audit log).<\/li>\n<\/ul>\n\n<p>\ud83d\udc49 <strong><a href=\"https:\/\/alnora-booking.com\/pricing\/\">Upgrade to Alnora Pro \u00bb<\/a><\/strong> \u2014 30-day money-back guarantee.<\/p>\n\n<p>\ud83c\udf0d <strong>Speak your patients' language<\/strong><\/p>\n\n<p>The booking form and every patient email are available in <strong>13 languages<\/strong> out of the box \u2014 English, German, French, Spanish, Italian, Dutch, Polish, Czech, Swedish, Danish, Norwegian, Ukrainian and Russian \u2014 chosen with a single <strong>Patient language<\/strong> setting, independent of your site language. Every string is translation-ready via the <code>alnora-clinic<\/code> text domain and standard <code>.mo<\/code>\/<code>.po<\/code> files, so you can add or refine languages with tools like Loco Translate. (Localised month names in email dates additionally require the matching WordPress language pack under Settings \u2192 General \u2192 Site Language.)<\/p>\n\n<h3>Notes for developers<\/h3>\n\n<ul>\n<li>The booking form and admin tables are dependency-free <strong>vanilla JavaScript<\/strong> (no build step required). The optional Gutenberg block uses <code>wp.element<\/code> and also needs no build step.<\/li>\n<li>For production, define a fixed encryption key in <code>wp-config.php<\/code>:\n  define( 'ALNC_ENCRYPTION_KEY', 'your-32-char-random-key-here' );\nIf omitted, a key is generated and stored once in the options table so the plugin works out of the box.<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to <strong>Freemius<\/strong>, a third-party service we use for software licensing, update delivery and \u2014 only if you opt in \u2014 anonymous usage analytics and diagnostics.<\/p>\n\n<p>When and what data is sent: on activation the plugin shows an opt-in screen. If you click \"Allow &amp; Continue\", it sends your site URL, your WordPress and PHP versions, and the email address of the admin who opts in, so we can deliver updates, verify licences and provide support. If you click \"Skip\", no data is sent and the plugin remains fully functional. If you later purchase or activate a Pro licence, licence and site-activation details are exchanged with Freemius to validate it.<\/p>\n\n<p>Service provider: Freemius, Inc. \u2014 Terms of Service: https:\/\/freemius.com\/terms\/ \u2014 Privacy Policy: https:\/\/freemius.com\/privacy\/<\/p>\n\n<p>Aside from Freemius, the plugin does not connect to any other external service. All assets (fonts, scripts and styles) are bundled with the plugin and served from your own site.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>alnora-clinic<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate <strong>Alnora<\/strong> through the <em>Plugins<\/em> menu in WordPress. On activation the plugin creates its database tables, custom roles and a <strong>Book an Appointment<\/strong> page containing the booking shortcode.<\/li>\n<li>Go to <strong>Alnora \u2192 Doctors<\/strong> and add at least one doctor (set their working hours).<\/li>\n<li>Go to <strong>Alnora \u2192 Services<\/strong> and add at least one service.<\/li>\n<li>Visit the auto-created booking page (link shown under <strong>Alnora \u2192 Settings<\/strong>) to test a booking.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20alnora%20really%20free%3F\"><h3>Is Alnora really free?<\/h3><\/dt>\n<dd><p>Yes. The free version is complete and unlimited \u2014 add as many doctors, services and bookings as you like, with no per-booking fees. Payments, reminders by SMS\/WhatsApp, calendar sync and clinical records are part of the optional <a href=\"https:\/\/alnora-booking.com\/pricing\/\">Alnora Pro<\/a> upgrade.<\/p><\/dd>\n<dt id=\"what%27s%20the%20difference%20between%20the%20free%20version%20and%20alnora%20pro%3F\"><h3>What's the difference between the free version and Alnora Pro?<\/h3><\/dt>\n<dd><p>The free version handles the whole booking journey \u2014 booking form, availability, patient records, GDPR consent and automatic email reminders. Alnora Pro adds online payments and deposits, pay-by-link invoices, recurring appointments and a waitlist, SMS &amp; WhatsApp reminders, Google\/Outlook calendar sync, telehealth links, encrypted medical records with prescription PDFs, a patient portal, multiple locations and more. See the full comparison at <a href=\"https:\/\/alnora-booking.com\/pricing\/\">alnora-booking.com\/pricing<\/a>.<\/p><\/dd>\n<dt id=\"does%20the%20booking%20form%20work%20with%20any%20theme%3F\"><h3>Does the booking form work with any theme?<\/h3><\/dt>\n<dd><p>Yes. The booking wizard is rendered inside a scoped <code>.alnc-booking<\/code> container with its own styles. A small CSS reset neutralises common theme interference (button padding, box-shadow, etc.).<\/p><\/dd>\n<dt id=\"how%20do%20i%20embed%20the%20booking%20form%3F\"><h3>How do I embed the booking form?<\/h3><\/dt>\n<dd><p>Place the shortcode <code>[alnora_booking]<\/code> on any page, or use the <strong>Alnora Booking Form<\/strong> Gutenberg block. A <strong>Book an Appointment<\/strong> page is created automatically on activation.<\/p><\/dd>\n<dt id=\"can%20i%20pre-select%20a%20doctor%20or%20service%20in%20the%20shortcode%3F\"><h3>Can I pre-select a doctor or service in the shortcode?<\/h3><\/dt>\n<dd><p>Pre-selecting a doctor or service via shortcode attributes (e.g. <code>doctor=\"1\" service=\"2\"<\/code>) is available in <strong>Alnora Pro<\/strong>. The free version embeds the full booking wizard with the plain <code>[alnora_booking]<\/code> shortcode.<\/p><\/dd>\n<dt id=\"is%20patient%20data%20stored%20securely%3F\"><h3>Is patient data stored securely?<\/h3><\/dt>\n<dd><p>Patient email and phone are encrypted at rest using AES-256. A SHA-256 hash of the email is stored separately for lookups. GDPR consent is recorded with a timestamp and IP address.<\/p><\/dd>\n<dt id=\"how%20many%20doctors%20can%20i%20add%3F\"><h3>How many doctors can I add?<\/h3><\/dt>\n<dd><p>There is no limit \u2014 add as many doctors as your clinic needs, each with their own profile, working hours and services.<\/p><\/dd>\n<dt id=\"where%20do%20i%20configure%20email%20notifications%3F\"><h3>Where do I configure email notifications?<\/h3><\/dt>\n<dd><p>Go to <strong>Alnora \u2192 Settings \u2192 Email &amp; reminders<\/strong>. You can set the from name, from address, admin notification email and reminder lead time.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20wpml%20or%20polylang%3F\"><h3>Does it work with WPML or Polylang?<\/h3><\/dt>\n<dd><p>All strings are translation-ready via the <code>alnora-clinic<\/code> text domain. Full WPML\/Polylang compatibility is planned for a future release.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.8<\/h4>\n\n<ul>\n<li>Improvement: the per-doctor <strong>Calendar colour<\/strong> picker has been removed. Doctors now use the Alnora brand colour everywhere, which keeps the booking form and calendars consistent. Nothing needs changing \u2014 existing doctors pick up the new colour automatically.<\/li>\n<li>Improvement: refreshed the admin <strong>Settings<\/strong> \u2014 the on\/off options are now branded toggle switches for a cleaner, on-brand look.<\/li>\n<\/ul>\n\n<h4>1.2.7<\/h4>\n\n<ul>\n<li>Fix: if the booking form was left open long enough for its security token to expire, submitting it showed a raw \"Cookie check failed\" message. It now explains that the page has been open too long and asks you to refresh.<\/li>\n<li>Fix: custom email templates carried over from a previous Pro install no longer leave unresolved placeholders (such as {location}) in patient emails.<\/li>\n<li>Maintenance: removed unused code from the booking form loader.<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>Fix: on the booking form, choosing a doctor who offers no services now shows a clear \"this doctor doesn't work with this service \u2014 please choose another doctor\" message, instead of the unrelated \"no free slots on this day\" notice.<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<p>This is a big feature update. Your data is preserved; new database tables and columns are created automatically on update.<\/p>\n\n<ul>\n<li>New: categories for doctors and services \u2014 create, edit and assign categories to organise your team and your services. Doctor categories are shown under each doctor on the booking form.<\/li>\n<li>New: rich service descriptions, with an optional per-service \"Read more\" popup on the booking form.<\/li>\n<li>New: \"Offered by\" \u2014 assign a service to specific doctors, or leave it available to every doctor. The booking form only shows each doctor the services they offer.<\/li>\n<li>New: search the Doctors and Services lists in the admin.<\/li>\n<li>New: GDPR retention \u2014 optionally auto-delete (anonymise) inactive patient records after a set number of years. Off by default; configure under Settings \u2192 GDPR.<\/li>\n<li>New: a \"More info\" popup in the Appointments list showing the full booking details at a glance.<\/li>\n<li>New: the booking form shows the clinic timezone beneath the title, so patients can see which timezone the available times are in.<\/li>\n<li>Improvement: dates and times across the booking form, emails and admin now follow your WordPress date and time format (Settings \u2192 General).<\/li>\n<li>Improvement: more of the booking page now follows the Patient language setting, including the appointment self-cancellation notices and the timezone label.<\/li>\n<li>Change: doctors are now organised with categories instead of a single specialisation field.<\/li>\n<li>Change: the main admin menu is now labelled \"Alnora Clinic\".<\/li>\n<li>Improvement: doctor cards in the booking form no longer render an empty line when a doctor has no category set.<\/li>\n<li>Improvement: admin notices now display at the top of every Alnora screen, above the page title (previously only some screens).<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>New: an optional upgrade path to Alnora Pro, with account and licence management, powered by Freemius. Any usage tracking is opt-in only \u2014 the plugin asks first and works fully if you skip. See the External Services section.<\/li>\n<li>Change: pre-selecting a doctor or service through <code>[alnora_booking]<\/code> shortcode attributes is now part of Alnora Pro; the free version embeds the standard booking wizard.<\/li>\n<li>Improvement: admin notices now display cleanly at the top of the Alnora screens.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Hardening: the public availability and available-dates REST endpoints now only return slots for an active doctor and an active service actually offered by that doctor, so availability for inactive\/hidden resources can no longer be enumerated. Added range validation for the requested month\/year.<\/li>\n<li>Translations: completed and updated the bundled translations for all 13 supported languages.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Fix (important): deleting the plugin no longer erases your data. Doctors, services, patients, appointments and settings are now kept on uninstall so they survive a reinstall; data is removed only if you explicitly enable \"Delete all data when the plugin is uninstalled\" under Settings \u2192 GDPR.<\/li>\n<li>Improvement: removed the WordPress admin focus ring on settings toggle checkboxes for a cleaner look.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>New: built-in translations for the booking form and patient emails in 13 languages (English, German, French, Spanish, Italian, Dutch, Polish, Czech, Swedish, Danish, Norwegian, Ukrainian, Russian), selectable via the new <strong>Patient language<\/strong> setting.<\/li>\n<li>New: patient emails are now sent in the configured Patient language regardless of the site language.<\/li>\n<li>Improvement: translations now use standard WordPress <code>.mo<\/code>\/<code>.po<\/code> language files (editable with Loco Translate) and ship a complete <code>.pot<\/code>.<\/li>\n<li>Fix: appointment reference numbers could collide after an appointment was deleted, causing a \"Could not save the appointment\" error on booking. References are now generated reliably.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: patients can cancel their own appointment via a secure link included in the appointment confirmation email.<\/li>\n<li>New: \"Minimum cancellation notice (hours)\" setting under Booking rules \u2014 controls how close to the appointment a patient may still cancel online (set to 0 to allow any time before the appointment).<\/li>\n<li>New: cancelled appointments show a tooltip in the Appointments list indicating whether they were cancelled by the client or the clinic.<\/li>\n<li>New: the clinic receives a notification email when a patient cancels their own appointment.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Fix: settings sub-pages (Shortcodes, Booking rules, Email &amp; reminders, GDPR) could return \"Sorry, you are not allowed to access this page\". They are now hidden from the sidebar without affecting access.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: search the Appointments list by reference, patient name, email or phone.<\/li>\n<li>New: search the Patients list by name, email or phone.<\/li>\n<li>New: the Appointments list now hides past days by default, with a \"Show past appointments\" button to reveal them (today's appointments stay visible so they can still be marked Completed \/ No-show).<\/li>\n<li>New: \"Load more\" on the Appointments list \u2014 the first 10 rows load instantly and more are revealed on demand for faster page rendering.<\/li>\n<li>New: an information icon beside the \"Status\" column header explains what each appointment status means.<\/li>\n<li>Improvement: hidden settings sub-pages are now removed from the admin menu in PHP instead of via a CSS :has() rule, removing an expensive per-interaction style recalculation in the admin.<\/li>\n<li>Improvement: the WordPress media library is now loaded only on the Doctors screen (where the photo uploader needs it), speeding up the other admin pages.<\/li>\n<li>Improvement: consistent button focus styling in the admin.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: doctors, services, working hours, availability engine, booking wizard, patient records, GDPR consent log, transactional emails, reminders and branded admin.<\/li>\n<\/ul>","raw_excerpt":"The all-in-one doctor appointment booking and clinic management plugin for WordPress \u2014 made exclusively for private medical practices.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/324786","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=324786"}],"author":[{"embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/alnoramanager"}],"wp:attachment":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=324786"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=324786"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=324786"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=324786"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=324786"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=324786"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}