From an empty PageMotor site to a course a student can enrol in and finish. Two pages, one ten-minute test drive, then your own material.
Before you start: EP Courses uploaded and activated, plus your PageMotor admin login. EP Membership can stay switched off until you take real students (Step 9).
On activating, because it catches everyone once: there is no Activate button in PageMotor. Tick the box next to the plugin, press Save Plugins, done.
The one idea that makes everything else obvious: courses are not pages. Courses live in a catalogue inside the plugin, the way products live inside a shop.
The viewer page you create in Step 2 is a television set. Every course is a channel: one page, and the link someone clicks decides which course it shows.
So you never create a page per course, or per lesson. You create list pages and one viewer page, and the plugin writes every link between them itself.
Open your site’s Updates screen and take EP Courses to 0.4.13 or later.
Two changes in that release matter here. The Category box now starts empty (older versions pre-filled an example that looked like a fixed list). And the free-versus-paid switch is now honestly labelled Access, not Level.
Not showing yet? Refresh the Updates screen once. Sites check the ElmsPark channel on a schedule, so a fresh release can take a little while to appear on its own.
Still nothing? Some older PageMotor versions only ask the update server at one moment: when Save Plugins is pressed. Open Manage Plugins, press Save Plugins without changing anything, then look at Updates again.
Create one new page with the slug course-viewer and put this on it:
[ep-course-viewer]
This is the single page where every course is watched. Each course gets its own address, like /course-viewer/?course=taiji-ruler, but they are all this one page showing a different channel.
Every Enrol and Continue button the plugin renders points here. That is why EP Courses nags you in its settings until the page exists: without it, those buttons lead to a 404.
Prefer a different slug? Change Course Viewer Page Slug in the plugin’s settings, and keep the page’s slug matching it exactly.
Create a second page with the slug courses and put this on it:
[ep-courses]
That one shortcode renders every published course as a card: title, outcome, lesson count, duration, a Free or Premium badge, and the right button for whoever is looking.
Keep this page even once you build fancier landing pages. A couple of the plugin’s own fallback links point to /courses/ when someone reaches the viewer without picking a course.
EP Courses planted a sample course called Getting Started the first time it ran. It exists for this exact moment: seeing the machine work before you feed it your own material.
Logged in to your site, open /courses/ and click Enrol Free on the Getting Started card. You land in the viewer. Click through all three lessons.
While you are in there, notice:
Enrolment and progress are tracked per student, and you just watched it happen. Keep the sample as a reference while you build; delete it whenever you are done with it.
In the plugin’s settings, open Manage Courses and press + Add Course. What each field actually does:
taiji, qigong, watercolours. Lowercase with hyphens, spelt identically on every course in that area. Step 8 filters on an exact match.On the course’s row, press Lessons, then + Add Lesson.
The Content (HTML) box is exactly what it says: what you type is what the page renders. Tags are the formatting. Students only ever see the formatted result, never the tags.
Four tags cover an entire course:
<p>Each paragraph wrapped like this.</p>
<h3>A heading inside the lesson</h3>
<ul>
<li>A list item</li>
<li>Another one</li>
</ul>
<p>Something <strong>bold</strong> mid-sentence.</p>
The sample course’s lessons use exactly these. Open one whenever you want a crib sheet.
Sort Order controls the sequence. Duration shows in the viewer. A Draft lesson stays hidden while you work on it.
Let Claude write the HTML. Hand it your raw notes and ask: “Turn this into lesson HTML: paragraphs in <p> tags, one <h3> per section, lists as <ul>.”
Paste the result into the Content box and save. Writing course material is work; wrapping it in tags should not be.
Each lesson has a Video Type and a Video URL:
An MP4 lesson shows a normal player streaming straight from your bucket. The video never passes through your website.
Selling the course? Protect the file, not just the page. Enrolment gates the lesson page, but a plain bucket link can be copied, shared, and it keeps working for anyone, forever.
EP Media Storage serves each course video through a link that expires, two hours by default. A copied link is dead by the time it travels, and students notice nothing. Same licence tier as EP Courses, and you author lessons exactly as above.
The catalogue page from Step 3 shows everything. When your site has areas, give each area its own list page with a filtered copy of the same shortcode. A Taiji page carries:
[ep-courses category="taiji"]
That shows only courses whose Category box says taiji. A Qigong page does the same with qigong. One category per list page.
The category typed on each course must match the shortcode’s exactly, hyphens and all.
Landing pages that just point at your areas (a martial arts page linking to Taiji and Qigong, say) need no shortcode. Only pages that list courses carry one.
One typing note: the quote marks must be the plain straight kind, ". Word processors and forums curl them into typographic quotes the shortcode cannot read. Copying from the code boxes on this page is safe.
Watching a lesson requires a login, even on a free course, because progress is tracked per student.
Accounts, registration and login are EP Membership’s department. The Enrol button sends logged-out visitors to /register/, so that page needs to exist by launch day, set up per the Membership docs.
Two switches in Membership’s settings deserve a warning label: Welcome Email and Require Email Verification. Both send through your site’s own email plumbing. If that is not wired up yet, the emails silently go nowhere, and verification leaves new members waiting for a link that never arrives.
So leave both off until email delivery is set up. That is its own short job: Set up reliable email with Mailgun.
Ready to charge for a course? That is done by gating access with EP Membership rather than by the Premium setting alone. The EP Courses reference docs cover the current state of paid access.
Open these only if you hit them.
On some older PageMotor versions, the site only asks the update server when Save Plugins is pressed, so refreshing the Updates screen changes nothing. Open Manage Plugins, press Save Plugins without changing anything, then check Updates again.
Still nothing after that? Post on the forum with your PageMotor version. An older core is the usual cause, and a direct download can tide you over.
Only Published courses appear, so check the course’s Status field first. If the page uses a category filter, check the spelling matches the course’s Category box exactly, hyphens and all.
The viewer page from Step 2 is missing, or its slug does not match the Course Viewer Page Slug setting. Create the page, or make the two match, and the buttons come back to life.
That course’s Access is set to Premium. Premium courses cannot take enrolments yet, so set it to Free while you build.
Either a typo in the shortcode name, or curly quote marks around the category. Retype it by hand with straight quotes, or copy it from this page.
The lesson body is HTML, so line breaks alone do not make paragraphs. Wrap each paragraph in <p> tags as in Step 6, or ask Claude to do the wrapping.
The buttons are built from the Course Viewer Page Slug setting, so update the setting to the new slug (or rename the page back). The two must always match.