Connecting your own services
Lumina Edu supports provider-owned workflows and external handovers. A program can render a mapped Contact Form 7 enquiry or Simply Schedule Appointments calendar on its own page, or route to a mapped Tutor LMS course. It can also hand a visitor to an external registration, contact, directions or mailing-list service. Lumina owns the mapping and presentation; the selected provider owns operational records and outcomes.
There is one integration that needs nobody at all: a dated session hands out its own calendar file. That one works the moment the companion plugin is active.
Where the site hands visitors over
| Handover | Where you fill it in | What appears on the site |
|---|---|---|
| Registration | Settings → Site details → How people register, and per program and per session | The main action on a program, a session and the final action band |
| Consultation | Program → Next step for a mapped calendar; Site details/per program for external fallback | Embedded availability or a named handoff |
| Program enquiry | Program → Next step → Contact Form 7 | An embedded validated form with program context |
| Course enrolment | Program → Next step → Tutor LMS | The mapped provider course; enrolled visitors receive a continue-course action |
| Contact page | Settings → Site details → Where else this site hands over | The contact action used by the site's sections |
| Enquiry form on the Contact page | Settings → Site details → Where else this site hands over → Enquiry form on this site | A Contact Form 7 form inside the Contact page's enquiry panel |
| Directions | Settings → Site details → Where else this site hands over | A "Get directions" link beside your address — a link, never a map |
| Mailing list | Settings → Site details → Where else this site hands over | A "Join the mailing list" action |
Each handover stores two things: an address, and the provider's name as you would say it out loud. Fill in both and the site tells a visitor where they are going before they go — on the button itself and in the line under it:
Register on Northline Bookings Registration continues on Northline Bookings. This site does not process enrolment or payment.
With an address and no name the button reads Register for this session.
Fill in only the address and the same control appears with the anonymous wording it has always had. Fill in neither and no control is rendered at all — not a greyed-out button, not a link to nowhere. An empty handover is silent.
What providers continue to own
These were considered and left out on purpose. If you need one, it is a link you add to a page yourself; nothing here pretends to manage it.
- Payment or checkout. Lumina Edu takes no payment and grants no access from a click. Link to your own payment or registration page.
- Learning and student login. Tutor LMS owns accounts, enrolment, lessons, quizzes and progress. Lumina stores only the mapped course ID and links into the provider journey.
- Social profiles and your e-mail address. Both are already Site details fields. A second home for the same fact is a second truth waiting to disagree with the first.
- A third-party calendar feed. The plugin writes its own calendar file (below), so subscribing to somebody else's copy of the same dates would buy a dependency for nothing.
Which address wins
- The dated session's own address.
- The program's address.
- Site details.
- For registration and consultation only: this site's own consultation page, so the action is never a dead end. That case prints no "continues on…" sentence, because nothing continues anywhere — the visitor stays here.
A session or program address with no name of its own borrows the Site details name only when it is on the same host. A program that books through a different provider stays honestly anonymous rather than wearing a name that is not that provider's.
Recipes
Each recipe answers the same four questions. The plugin versions we tested, and exactly what was tested, are listed in Tested versions. What follows describes the shape of the thing to look for.
Simply Schedule Appointments
Install the free edition and create at least one published appointment type.
- Where to map it. Programs → Edit → Program decision details → Next step. Choose Consultation — Simply Schedule Appointments, then choose the type. Records switch live.
- What Lumina does. Renders the provider shortcode and links the program action to it.
- What SSA does. Availability, timezone conversion, booking record, confirmation and any supported cancellation/rescheduling behaviour.
- How to test it. Complete one logged-out booking, verify one provider record, verify its notification separately and exercise the edition's cancellation/rescheduling route.
Contact Form 7 and Flamingo
Publish a Contact Form 7 form. Install Flamingo when submissions must be retained in WordPress.
- Where to map it. Programs → Edit → Program decision details → Next step. Choose Enquiry form — Contact Form 7, then choose the published form. Records switch live.
- What Lumina does. Renders the form, starts its subject field on the program's title and adds
hidden program ID, title and URL fields. The subject is the first empty single-line field named
your-subject,subject,program,your-programorprogramme— Contact Form 7's default form already hasyour-subject. - A form on your contact or consultation page. A program's Book a consultation that stays on
your site — your consultation page, or a consultation address on your own domain such as
/contact/— carries the program as?program=<slug>. A Contact Form 7 form on that page starts its subject on that program and adds the same hidden fields, so the enquiry says which program it is about. A consultation address on another site is left exactly as you typed it. - The Contact page's own form. Choose a published form under Settings → Site details → Where else this site hands over → Enquiry form on this site and the Contact page's enquiry panel holds it. See the contact form.
- What the providers do. Contact Form 7 validates and sends; Flamingo stores submissions.
- How to test it. Invalid data must create no record. One valid submission must create exactly one record with program context. Verify mail delivery separately because Flamingo can retain a submission whose mail failed. See Enquiries, consultations, email and privacy.
Tutor LMS
Publish a Tutor LMS course before mapping it.
- Where to map it. Programs → Edit → Program decision details → Next step. Choose Course enrolment — Tutor LMS, then select the published course.
- What Lumina does. Links the public program action to the course and changes the action to Continue course when Tutor reports that the current user is enrolled.
- What Tutor does. Registration, authentication, access, lessons, quizzes and progress.
- How to test it. Use a non-admin learner: enrol, open one lesson, complete one quiz and verify progress. Verify a logged-out visitor cannot open locked material.
The Events Calendar and Event Tickets
Publish an event before linking it to a Lumina session.
- Where to map it. Programs → Sessions → Edit → Program. Choose a Related event beside the delivery option.
- What Lumina does. Keeps its own calendar download and adds a separate event-detail control to that session row.
- What the providers do. The Events Calendar owns event time, venue and organizer. Event Tickets owns RSVP or ticket records, attendee privacy and capacity behaviour supported by the installed edition.
- How to test it. Verify the event timezone, past/upcoming behaviour and event link. Complete one RSVP and inspect attendee visibility. Do not claim paid tickets or capacity enforcement until the installed provider editions and checkout route pass those tests.
A CRM or a mailing list
The shape: a hosted sign-up page, with its own consent text and its own unsubscribe link.
- Where to paste the address. Settings → Site details → Where else this site hands over → Mailing list address.
- What the theme does with it. Renders "Join the mailing list" and names the service.
- What it does not do. No address, no name and no consent is collected or stored on this site. There is no embedded sign-up field anywhere in the theme, deliberately: an embedded field would mean a third-party script on every page and a consent record this product will not keep.
- How to test it. Follow the link and subscribe with a fresh address. Confirm the consent wording on the service's page is yours and is accurate. Confirm the unsubscribe link works. Then read your own privacy notice again and make sure it describes what actually happens.
A calendar or scheduling page
The shape: a published calendar somebody can browse, or a per-person scheduling page.
- Where to paste the address. As a consultation address — per program, or site-wide in How people register.
- What the theme does with it. Treats it as the consultation handover: the action reads "Book a consultation" and the note names the service.
- What it does not do. It does not read the calendar, show availability, or synchronise anything. A session's status on this site is what you typed; it never means a seat is free.
- How to test it. Confirm the page loads for somebody who is not signed in to the service.
Add to calendar: the integration with no account
A session offers Add to calendar — in the session ledger and in the decision panel beside the
main action — when a visitor can still join it: it is open, its last meeting is not in the past,
and it has a Start time and an End time. A session with dates but no times, a closed session
and a session that has already run show no calendar button. The file is generated by the plugin
itself at ?lue_calendar=<session id>, served as text/calendar with the session's own file name.
No account, no configuration, no request leaves your site, and it works on a plain permalink
setting.
The file holds one weekly event: the first meeting, from its start time to its end time, which repeats every week on the meeting days until the session's end date. It carries the program title as its summary, the session's location text and a link back to the program page. Times are written in the session's timezone — the site's own, unless the session sets Session timezone — and the file describes that timezone, so a calendar in another zone shows the right local hour. A skipped or repeated daylight-saving wall time is rejected because the stored value would be ambiguous.
A session that meets on more than one day a week (Tuesdays and Thursdays, say) ticks each day under Meets on in the session editor. Leave Meets on clear when it meets once a week, on the start date's weekday. Lumina never reads a schedule sentence such as "Tue & Thu · 18:30–20:00" to invent times or days; that label is what visitors read, and Meets on is what the calendar uses.
To test it: open a program with an upcoming timed session, press Add to calendar, and open the downloaded file. Your calendar should show the program title at the session's start time, repeating weekly until its last date.
Destination profiles
A destination profile is a named set of addresses: for each handover — registration, consultation, contact, directions, mailing list — the address a visitor is sent to and the provider's name. It exists so that a demonstration site and a real site can be the same installation in two states rather than two different builds.
placeholderis the default, and the state this theme ships in. Its addresses are examples of the shape of the thing. They are printed in the Site details field descriptions to show you what belongs there, and they are never linked from a page. On a placeholder profile, the only destinations a visitor can reach are the ones you recorded yourself.- A live profile supplies real destinations. It is registered in code by whoever runs the
installation, on the
lumina_edu_core_destination_profilesfilter, from a site-specific must-use plugin. No live third-party address ships inside the theme or plugin ZIP. A live profile answers before Site details, deliberately: it belongs to the installation rather than to its content, so re-importing the demo cannot take a hosted demonstration off its real services.
Choose the profile in Settings → Site details → Where else this site hands over → Destination
profile, or pin it where no editor and no importer can reach it by putting this in
wp-config.php:
define( 'LUMINA_EDU_CORE_DESTINATION_PROFILE', 'placeholder' );
A profile's shape, for anyone registering one:
add_filter(
'lumina_edu_core_destination_profiles',
function ( $profiles ) {
$profiles['my-demo'] = array(
'label' => 'My demonstration services',
'live' => true,
'seams' => array(
'registration' => array(
'url' => 'https://booking.example.org/demo',
'name' => 'Example Bookings',
),
),
);
return $profiles;
}
);
Handovers a live profile does not name fall through to Site details as usual, so a profile can supply one destination and leave the rest alone.
Before you launch
- Replace every demo address in Site details with your own, or empty the field.
- Give every handover you use a provider name, so the sentence beside the button says where it goes.
- Check the destination profile is the one you mean.
- Click every action on a published page, in a private window, and watch where it lands.
- Recheck the links whenever a provider changes — nothing on this site can notice that for you.