EP Courses
EP Courses is course and lesson management for PageMotor. Courses contain lessons, students enrol, their progress is tracked as they work through the material, and content can be translated into any of 24 languages including Welsh, Irish, and several South African languages.
Published by ElmsPark Studio.
Status
Section titled “Status”Work in progress (version 0.4.1). The core structure is stable but some features are still being built. This guide describes what is currently shipping. Expect changes in subsequent versions.
What EP Courses does
Section titled “What EP Courses does”- Course catalogue with title, slug, description, learning outcomes, level (beginner / intermediate / advanced), price, status.
- Lessons attached to courses, with ordered sequence and translatable content.
- Enrolment tracking — which student is in which course.
- Progress tracking — which lessons has the student completed.
- Multilingual content — store title and body as JSON translations per course and per lesson.
What EP Courses does NOT do (yet)
Section titled “What EP Courses does NOT do (yet)”This plugin deliberately has a narrow scope. It does not:
- Handle frontend student login — that’s EP Membership’s job.
- Host videos — embed from YouTube, Vimeo, or a file you host elsewhere.
- Issue certificates — not currently built in.
- Run quizzes inside lessons — not currently built in.
For a full learning management system, combine EP Courses with EP Membership (for login and access control) and EP Ecommerce Subscriptions (for paid course access).
Requirements
Section titled “Requirements”- PageMotor 0.8.2b or later
- EP Suite base class
Optional but commonly paired:
- EP Membership for student accounts and authenticated course access.
- EP Ecommerce Subscriptions for paid enrolment.
Installation
Section titled “Installation”- Download
ep-courses.zipfrom the EP Suite downloads page. - Upload via Plugins → Manage Plugins. Activate.
- Open the settings page and set the viewer slug (URL slug of the page that will host the lesson viewer).
- Create a PageMotor page with that slug and add the
[course-viewer]shortcode to it.
Shortcodes
Section titled “Shortcodes”| Shortcode | Purpose |
|---|---|
[courses] | Course catalogue grid. Shows every active course with lesson count, duration, and whether it’s free or paid. Links each course to its first lesson. |
[course-viewer] | Lesson viewer. Renders the current lesson with navigation to previous and next. Place on a single page — the viewer URL is shared across all lessons. |
Database tables
Section titled “Database tables”{prefix}ep_courses— course catalogue rows.{prefix}ep_lessons— lesson content with translations JSON.- Enrolment and progress tables keyed to course ID and student ID.
Multilingual content
Section titled “Multilingual content”Each course and lesson stores its title and body as a JSON map:
{ "en": { "title": "Introduction", "body": "..." }, "cy": { "title": "Cyflwyniad", "body": "..." }, "ga": { "title": "Réamhrá", "body": "..." }}The viewer picks the correct translation based on the active site language. Missing translations fall back to the site’s default language.
The 24 supported languages are configured in settings. Welsh, Irish, Scots Gaelic, and multiple South African languages (Afrikaans, isiZulu, Xhosa, Sesotho) are supported alongside the usual European set.
Typical setup flow
Section titled “Typical setup flow”- Create a course with title, description, outcome, level, and price.
- Add lessons to the course. Each lesson has a title, body, and sort order.
- (Optional) Enable translations on a course and add translated title / body per language.
- Create a page with the viewer slug, add
[course-viewer]. - Create a catalogue page, add
[courses]. - If paid, configure EP Ecommerce Subscriptions to sell access to the course.
- If gated, configure EP Membership to require login for the viewer page.
Troubleshooting
Section titled “Troubleshooting”“The course catalogue is empty”
Section titled ““The course catalogue is empty””Only active courses appear. Check your courses have status = Active, not Draft.
“Clicking a course goes to a 404”
Section titled ““Clicking a course goes to a 404””The viewer page must exist at the slug configured in Settings → Viewer slug, and that page must contain [course-viewer]. Verify both.
“Translations aren’t appearing”
Section titled ““Translations aren’t appearing””The viewer uses the active site language. Check your translation JSON has the exact language code your site uses (e.g. en-GB vs en). Missing translations fall back to the default language.
“I want to restrict a course to paid subscribers only”
Section titled ““I want to restrict a course to paid subscribers only””That’s a job for EP Membership plus EP Ecommerce Subscriptions. Gate the viewer page’s parent, or specific courses, via EP Membership’s access rules.
“Students can see lessons they haven’t completed prerequisites for”
Section titled ““Students can see lessons they haven’t completed prerequisites for””Prerequisite-based progression isn’t built in yet. On the roadmap but not shipped. See the review queue.
Feedback and corrections
Section titled “Feedback and corrections”For a quick question about this plugin, EP Support inside your admin is the fastest option. The chat widget sits on every EP plugin settings page and knows which one you’re on, with starter questions and links preloaded for that exact screen.
For anything bigger — a bug report, a feature request, or a “how do I…” that needs a real reply — open a ticket at help.elmspark.com. A real person, helped by AI, writes the reply. Usually within a few hours. Tickets don’t disappear into the void.