Doctor Appointment Booking & Clinic Management – Alnora

説明

Alnora is the all-in-one doctor appointment booking and clinic management plugin for WordPress — built exclusively for private medical practices.

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 — dentists, psychologists, physiotherapists, dermatologists, cosmetic clinics or GPs — Alnora gives your patients a beautiful, multi-step booking experience and gives your front desk one calm place to manage it all.

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.

👉 Live demo · See Pro pricing · Documentation

Why private clinics choose Alnora

  • 🏥 Built for medicine, not retail. Every screen assumes doctors, services and patients — so setup is fast and nothing feels like a workaround.
  • 🔒 Your data stays yours. Everything runs on your own WordPress site and database. Patient contact details are encrypted at rest (AES-256).
  • 🛡️ GDPR-ready from day one. Consent is captured with a timestamp and IP, and inactive records can auto-delete on a schedule you choose.
  • 💚 Free forever, unlimited. Unlimited doctors, services and bookings — no per-booking fees, no artificial caps.

🩺 Free features — everything you need to start taking bookings

  • Unlimited doctors — full profiles with photo, bio, email and per-doctor weekly working hours and breaks.
  • Unlimited services — rich descriptions with an optional “Read more” popup, plus duration, buffer time, price and colour.
  • “Offered by” control — assign each service to specific doctors, or leave it available to every doctor.
  • Doctor & service categories — organise your team and your menu; doctor categories appear on the booking form.
  • Beautiful multi-step booking wizard — patients choose doctor service date & time details. Drop it anywhere with the [alnora_booking] shortcode or the Gutenberg block.
  • Smart availability engine — respects working hours, breaks, buffers, existing bookings and your booking window, so double-bookings simply can’t happen.
  • Patient self-service cancellation — a secure link in every confirmation lets patients cancel within the notice period you set.
  • Encrypted patient records — email and phone encrypted at rest (AES-256) with a hashed lookup, all on your own server.
  • GDPR consent & retention — timestamped consent with IP, plus optional automatic deletion of inactive records.
  • Automatic emails & reminders — booking confirmations, clinic notifications, status updates and timed reminders, all sent for you.
  • A clean, branded admin — 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.
  • Dedicated clinic roles — built-in Clinic Doctor, Receptionist and Patient roles, so every team member signs in with the right level of access.
  • Works with your formats — dates, times and the clinic timezone follow your WordPress settings and show on the booking form.
  • 13 built-in languages — set the patient-facing language independently of your site language (see below).
  • Developer-friendly — dependency-free vanilla JavaScript (no build step) and a REST API under the alnora-clinic/v1 namespace.

Alnora Pro — turn booking into a complete clinic system

Upgrade to Alnora Pro and add everything a growing private practice needs:

  • 💳 Payments & deposits — take card (Stripe) and PayPal payments at booking, require a deposit, and issue full or partial refunds — all inside WordPress.
  • ✉️ Email a payment link — 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.
  • 🧾 Branded invoice PDFs — a professional, logo-headed invoice for every appointment, marked paid automatically.
  • 🔁 Recurring appointments & waitlist — let patients book a whole course of visits in one step, and fill cancellations automatically.
  • 🔄 One-click rescheduling — move any booking to a new time; the patient is automatically re-notified and calendars and reminders update to match.
  • 🔔 SMS & WhatsApp reminders — cut no-shows with automated text and WhatsApp messages (via Twilio), alongside email.
  • 📅 One-way calendar sync — push bookings to Google Calendar and Microsoft Outlook, with events removed automatically on cancellation.
  • 🎥 Telehealth — auto-generate Zoom or Google Meet links for online consultations.
  • 🗂️ Encrypted medical records — clinical notes with one-click prescription and diagnosis PDFs, in any language.
  • 👤 Patient portal — patients log in to view, cancel, rebook and download their documents.
  • 🔑 Doctor self-service login — doctors sign in to a read-only view of their own profile, services and diary, seeing only their own appointments.
  • 📍 Multiple locations — run several branches, each with its own doctors, availability, photo and contact details.
  • 🎨 Full branding & templates — match the booking widget to your site and edit every email template.
  • Automation & reporting — Zapier webhooks, CSV import, revenue reports and a complete GDPR toolkit (export, erasure, audit log).
  • 📋 Custom forms — build named sets of questions (intake, pre-visit, consent) and decide which patients see which, by doctor, service, category, location or new-versus-returning. Ask them on the booking form, in the patient portal, or on a page of their own — and keep every submission as history instead of overwriting last time’s answer.
  • 📨 Send an email to your patients — write to a chosen list with headings, images and buttons, personalised per patient with tokens and sent in the background in batches. Doctors can write to their own patients.
  • 🧩 Token Builder — make your own tokens (a branded button, a link, a paragraph, a highlighted notice or an image) and drop them into any email, SMS, WhatsApp or Telegram template. Aim each one at new or returning patients, or by doctor, service, location and category, and change it once to update every message that uses it.
  • 🏦 Bank transfer payments — show your account details and a reference, hold the appointment while the money is on its way, then confirm it with one button. No gateway involved, so it works in any country and any currency with no per-payment fee.
  • 💬 Telegram messages — a third messaging channel alongside SMS and WhatsApp, with its own templates and its own place in the reminder schedule.
  • 📎 Patient documents — keep referral letters, earlier scans and forms signed on paper against the patient rather than a single appointment, in the same protected storage as medical records and never reachable by URL.
  • 💾 Backup, restore & CSV export — export your whole clinic as one file to move site or put things back after a problem, and export or import doctors, services, categories, locations and patients as CSV.

👉 Upgrade to Alnora Pro » — 30-day money-back.

🌍 Speak your patients’ language

The booking form and every patient email are available in 13 languages out of the box — English, German, French, Spanish, Italian, Dutch, Polish, Czech, Swedish, Danish, Norwegian, Ukrainian and Russian — chosen with a single Patient language setting, independent of your site language. Every string is translation-ready via the alnora-clinic text domain and standard .mo/.po 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 General Site Language.)

Notes for developers

  • The booking form and admin tables are dependency-free vanilla JavaScript (no build step required). The optional Gutenberg block uses wp.element and also needs no build step.
  • For production, the encryption key belongs in wp-config.php:
    define( ‘ALNC_ENCRYPTION_KEY’, ‘your-32-char-random-key-here’ );
    If omitted, a key is generated into the options table so the plugin works out of the box — which means the key sits in the same database as the data it protects. Alnora Settings GDPR Encryption key shows the existing key as a ready-made define() line and removes the database copy once it is in place, so the move re-encrypts nothing. Do not substitute a new key by hand: a different key makes every existing record unreadable. Once moved, that line is the only copy — back it up separately, since backup plugins do not copy wp-config.php.

External Services

This plugin connects to Freemius, a third-party service we use for software licensing, update delivery and — only if you opt in — anonymous usage analytics and diagnostics.

When and what data is sent: on activation the plugin shows an opt-in screen. If you click “Allow & 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.

Service provider: Freemius, Inc. — Terms of Service: https://freemius.com/terms/ — Privacy Policy: https://freemius.com/privacy/

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.

スクリーンショット

ブロック

このプラグインは1個のブロックを提供します。

  • Alnora Booking

インストール

  1. Upload the alnora-clinic folder to /wp-content/plugins/.
  2. Activate Alnora through the Plugins menu in WordPress. On activation the plugin creates its database tables, custom roles and a Book an Appointment page containing the booking shortcode.
  3. Go to Alnora Doctors and add at least one doctor (set their working hours).
  4. Go to Alnora Services and add at least one service.
  5. Visit the auto-created booking page (link shown under Alnora Settings) to test a booking.

FAQ

Is Alnora really free?

Yes. The free version is complete and unlimited — 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 Alnora Pro upgrade.

What’s the difference between the free version and Alnora Pro?

The free version handles the whole booking journey — 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 & 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 alnora-booking.com/pricing.

Does the booking form work with any theme?

Yes. The booking wizard is rendered inside a scoped .alnc-booking container with its own styles. A small CSS reset neutralises common theme interference (button padding, box-shadow, etc.).

How do I embed the booking form?

Place the shortcode [alnora_booking] on any page, or use the Alnora Booking Form Gutenberg block. A Book an Appointment page is created automatically on activation.

Can I pre-select a doctor or service in the shortcode?

Pre-selecting a doctor or service via shortcode attributes (e.g. doctor="1" service="2") is available in Alnora Pro. The free version embeds the full booking wizard with the plain [alnora_booking] shortcode.

Is patient data stored securely?

Patient email and phone are encrypted at rest using AES-256. A hash of the email, keyed with your encryption key (HMAC-SHA256), is stored separately for lookups, so it cannot be matched back to an address without the key. GDPR consent is recorded with a timestamp and IP address.

How many doctors can I add?

There is no limit — add as many doctors as your clinic needs, each with their own profile, working hours and services.

Where do I configure email notifications?

Go to Alnora Settings Email & reminders. You can set the from name, from address, admin notification email and reminder lead time.

Does it work with WPML or Polylang?

All strings are translation-ready via the alnora-clinic text domain. Full WPML/Polylang compatibility is planned for a future release.

評価

このプラグインにはレビューがありません。

貢献者と開発者

Doctor Appointment Booking & Clinic Management – Alnora はオープンソースソフトウェアです。以下の人々がこのプラグインに貢献しています。

貢献者

“Doctor Appointment Booking & Clinic Management – Alnora” は3ロケールに翻訳されています。 翻訳者のみなさん、翻訳へのご協力ありがとうございます。

“Doctor Appointment Booking & Clinic Management – Alnora” をあなたの言語に翻訳しましょう。

開発に興味がありますか ?

コードを閲覧するか、SVN リポジトリをチェックするか、開発ログRSS で購読してみてください。

変更履歴

1.3.4

  • Security: your encryption key can now be moved out of the database. Patient records were always encrypted, but out of the box the key that opens them was generated into the same database, so a copy of the database was a copy of the data. The new Settings GDPR Encryption key section shows the exact line to paste into wp-config.php, then removes the database copy for you. It is your existing key, so nothing is re-encrypted and nothing changes for your patients or staff. The Remove button is refused until the line is in place and holds that exact key, so it cannot be pressed too early.
  • Security: the key can go in any of three places, so there is no host where it has to stay in the database. wp-config.php is the recommendation. The screen also gives you a ready-made must-use plugin (wp-content/mu-plugins/alnora-key.php) for hosting that keeps wp-config.php out of reach, and your theme’s functions.php works too. Alnora can tell when the key comes from your theme and warns you, because a theme update or a theme switch would take the key with it and leave every patient record reading as blank.
  • Security: the patient email lookup is now keyed. The value stored beside each patient’s encrypted email was a plain hash of the address, which is reversible in practice: anyone with your database could hash a list of people and see which of them are your patients. It is now keyed with your encryption key. Existing records are converted in the background in small batches. There is nothing to do, and returning patients keep being matched to their own history throughout.
  • New: Alnora checks your key and tells you when something is wrong, on its own screens and only to administrators. It spots a key that is still in the database, an ALNC_ENCRYPTION_KEY line that has gone missing, a line holding a different key from the one your records were encrypted with, and a spare unused key left in the database. Each has its own notice and its own fix on the Encryption key screen. Where two keys disagree, Alnora tests them against your stored records and tells you which one opens them. It never deletes a key or makes a new one on its own.
  • New: the “your encryption key is stored in the database” notice has a Remind later button. It hides the notice for a month for the admin who clicked it, then brings it back until the key is moved. Only this notice can be put off. The notices that mean patient records cannot be read still appear on every Alnora screen.
  • Note: upgrading to Alnora Pro or back keeps working. Pro and the free version use the same key, in the same place, and the same email lookup, so your records stay readable whichever one is active.

1.3.3

  • Fix: on a small number of sites the booking form never got past Loading…. The form’s settings are sent to the page as a separate inline script, and on some hosting setups that script did not reach the browser, leaving the form with nothing to work from. Those settings now also travel inside the form’s own markup, so the form has what it needs even when the inline script goes missing. Nothing changes on sites where the form already worked.
  • Improvement: if the booking form ever cannot find its settings, it now says so on the page instead of showing an empty box, so you know to reload rather than assuming the form is broken.

1.3.2

  • New: choose the exact appointment times you offer. Each day in a doctor’s Working hours now has an Hours setting with two options. Start to end is how Alnora has always worked — a start time, an end time, an optional break, and slots generated at your booking interval. Specific hours lets you tick the individual start times that day offers, so a doctor who only sees patients at 09:00, 11:30 and 16:00 can say exactly that. Tick times one by one, or use Fill to select a whole range and Copy to all days to reuse a pattern across the week.
  • Improvement: a doctor signed in with the Clinic Doctor role now sees their chosen times listed on their read-only My profile page, the same way the clinic set them.
  • Improvement: more CSS hooks on the booking form. The widget now carries a class for the step it is on (alnc-booking--step-datetime, alnc-booking--step-2), and each doctor, service and time button carries its own identifying class (alnc-choice--id-4, alnc-service--id-7, alnc-slot--t0930). Nothing was renamed or removed, so any CSS you already wrote keeps working — these are extra targets for styling one step, one doctor or one time without editing the plugin.
  • Improvement: the working-hours editor is easier to use on a phone or tablet — each day becomes its own card, and the time picker fits a narrow screen.
  • Fix: the service cards on the booking form kept their own background when a theme tried to restyle them, which could leave the text unreadable on some themes.

1.3.1

  • New: turn any email off. A new Email templates list under Settings Email & reminders shows all six emails Alnora sends — Booking received, New booking (clinic), Appointment confirmed, Appointment cancelled, Appointment reminder and Cancellation (clinic) — each with its own Send this email switch. Untick one and it is never sent; everything stays on until you change it, so nothing changes on update. Editing the wording of these emails is a Pro feature.

1.3.0

  • Improvement: request your language. If the language your patients speak is not in the Patient language list (Settings General), a note under the selector now links to our contact page so you can ask for it — send us a message with the subject “Language request” and we will add it to a future release.

1.2.9

  • New: doctor sign-in. When a Clinic Doctor signs in with the same email address as their doctor record, they are recognised automatically — they get a read-only My profile and My services view and see only their own appointments in the Appointments list. No extra setup needed.
  • New: the clinic currency selector now offers 149 currencies from around the world, grouped by region (Europe, Middle East, Africa, Americas, Asia & Pacific), each with the correct symbol — so almost any clinic can price in its local currency.

1.2.8

  • Improvement: the per-doctor Calendar colour picker has been removed. Doctors now use the Alnora brand colour everywhere, which keeps the booking form and calendars consistent. Nothing needs changing — existing doctors pick up the new colour automatically.
  • Improvement: refreshed the admin Settings — the on/off options are now branded toggle switches for a cleaner, on-brand look.

1.2.7

  • 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.
  • Fix: custom email templates carried over from a previous Pro install no longer leave unresolved placeholders (such as {location}) in patient emails.
  • Maintenance: removed unused code from the booking form loader.

1.2.6

  • Fix: on the booking form, choosing a doctor who offers no services now shows a clear “this doctor doesn’t work with this service — please choose another doctor” message, instead of the unrelated “no free slots on this day” notice.

1.2.5

This is a big feature update. Your data is preserved; new database tables and columns are created automatically on update.

  • New: categories for doctors and services — create, edit and assign categories to organise your team and your services. Doctor categories are shown under each doctor on the booking form.
  • New: rich service descriptions, with an optional per-service “Read more” popup on the booking form.
  • New: “Offered by” — assign a service to specific doctors, or leave it available to every doctor. The booking form only shows each doctor the services they offer.
  • New: search the Doctors and Services lists in the admin.
  • New: GDPR retention — optionally auto-delete (anonymise) inactive patient records after a set number of years. Off by default; configure under Settings GDPR.
  • New: a “More info” popup in the Appointments list showing the full booking details at a glance.
  • New: the booking form shows the clinic timezone beneath the title, so patients can see which timezone the available times are in.
  • Improvement: dates and times across the booking form, emails and admin now follow your WordPress date and time format (Settings General).
  • Improvement: more of the booking page now follows the Patient language setting, including the appointment self-cancellation notices and the timezone label.
  • Change: doctors are now organised with categories instead of a single specialisation field.
  • Change: the main admin menu is now labelled “Alnora Clinic”.
  • Improvement: doctor cards in the booking form no longer render an empty line when a doctor has no category set.
  • Improvement: admin notices now display at the top of every Alnora screen, above the page title (previously only some screens).

1.2.4

  • New: an optional upgrade path to Alnora Pro, with account and licence management, powered by Freemius. Any usage tracking is opt-in only — the plugin asks first and works fully if you skip. See the External Services section.
  • Change: pre-selecting a doctor or service through [alnora_booking] shortcode attributes is now part of Alnora Pro; the free version embeds the standard booking wizard.
  • Improvement: admin notices now display cleanly at the top of the Alnora screens.

1.2.3

  • 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.
  • Translations: completed and updated the bundled translations for all 13 supported languages.

1.2.2

  • 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 GDPR.
  • Improvement: removed the WordPress admin focus ring on settings toggle checkboxes for a cleaner look.

1.2.1

  • 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 Patient language setting.
  • New: patient emails are now sent in the configured Patient language regardless of the site language.
  • Improvement: translations now use standard WordPress .mo/.po language files (editable with Loco Translate) and ship a complete .pot.
  • 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.

1.2.0

  • New: patients can cancel their own appointment via a secure link included in the appointment confirmation email.
  • New: “Minimum cancellation notice (hours)” setting under Booking rules — controls how close to the appointment a patient may still cancel online (set to 0 to allow any time before the appointment).
  • New: cancelled appointments show a tooltip in the Appointments list indicating whether they were cancelled by the client or the clinic.
  • New: the clinic receives a notification email when a patient cancels their own appointment.

1.1.1

  • Fix: settings sub-pages (Shortcodes, Booking rules, Email & reminders, GDPR) could return “Sorry, you are not allowed to access this page”. They are now hidden from the sidebar without affecting access.

1.1.0

  • New: search the Appointments list by reference, patient name, email or phone.
  • New: search the Patients list by name, email or phone.
  • 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).
  • New: “Load more” on the Appointments list — the first 10 rows load instantly and more are revealed on demand for faster page rendering.
  • New: an information icon beside the “Status” column header explains what each appointment status means.
  • 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.
  • 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.
  • Improvement: consistent button focus styling in the admin.

1.0.0

  • Initial release: doctors, services, working hours, availability engine, booking wizard, patient records, GDPR consent log, transactional emails, reminders and branded admin.