Activity & Certificates
Course activity in the stream
Section titled “Course activity in the stream”The plugin can post seven kinds of learning activity to the PeepSo activity stream:
| Activity | Setting | Default | Default phrase |
|---|---|---|---|
| Course enrollment | lms_activity_enroll |
On | {user} enrolled in {course_name} |
| Course completion | lms_activity_complete |
On | {user} completed {course_name} |
| Lesson completion | lms_activity_lesson |
Off | {user} finished the lesson {lesson_name} |
| Quiz passed | lms_activity_quiz_pass |
On | {user} passed the quiz {quiz_name} |
| Quiz taken | lms_activity_quiz_fail |
Off | {user} took the quiz {quiz_name} |
| Certificate earned | lms_activity_certificate |
On | {user} earned a certificate in {course_name} |
| Achievement earned | lms_activity_achievement |
On | {user} unlocked a new achievement |
The Achievement earned type (LifterLMS achievements/badges) was wired in earlier versions but had no setting, so it could never post. It has its own toggle as of 2.0.0.
Each LMS module hooks its platform’s own events (for example MasterStudy’s
add_user_course, stm_lms_lesson_passed, and stm_lms_quiz_passed) and routes
them through one shared activity builder. Every platform therefore produces the same
tokenized message, the same stream card, and honors the same settings - there is no
per-platform copy to keep in sync.
How a message is built
Section titled “How a message is built”Messages are stored as templates with tokens and resolved at render time:
{user}- the member’s profile link{course_name}- linked, bold course title{lesson_name}/{quiz_name}- the relevant entity title
Each type’s Action text field is prefilled with its full default phrase, so you edit the wording in place and keep the tokens where you want the names to appear. A saved phrase is used verbatim; clearing the field restores the default. The entity id is stored on the activity post as meta, so tokens resolve correctly whenever the item is displayed. See Configuration for the field details.
The course card
Section titled “The course card”Under an enroll or complete entry the plugin attaches a compact course card. It prefers PeepSo’s oEmbed card when the course post type produces one, and otherwise renders a self-contained card (small thumbnail if the course has a featured image, title, and a short excerpt). An entry never leaves an empty tall media slot when the course has no image.
Gating and de-duplication
Section titled “Gating and de-duplication”An activity is posted only when all of these pass:
- the type’s site-level toggle is on, and
- the member has not opted out of that type (Preferences > Learning Activity).
Each (member, type, entity) pair is tracked in user meta so a milestone is not posted twice for the same attempt. Retakes, quiz re-attempts, and re-enrolments do post again - as of 2.0.0 a milestone is no longer suppressed forever after the first time.
The Certificates tab
Section titled “The Certificates tab”The Certificates profile tab lists certificates a member has earned, grouped by
LMS. It is controlled by the Certificates > Enabled admin toggle
(lms_profile_achievements_enable, default on), which appears only when an active
LMS supports certificates.
Behavior:
- When the toggle is on (and an active LMS supports certificates), the tab is shown for every member, with a count badge of earned certificates.
- A member with no certificates yet sees the tab with an empty-state message rather than the tab vanishing. This is deliberate - members can see the tab exists and know what it is for.
- When the toggle is off, or no active LMS supports certificates, the tab is not registered at all.
Certificates are read per platform from each module’s get_user_certificates(), so
the tab aggregates certificates across every active LMS. (The tab shows earned
certificates only. LifterLMS achievement badges create stream activity but are not
listed on this tab.)
Related profile tabs
Section titled “Related profile tabs”Two more tabs appear conditionally:
- Instructing - courses the member teaches. Shown only when the member instructs at least one course (all five platforms report an instructor).
- Assignments - submitted assignments. LearnDash only - it is the only platform whose module declares assignment support. The tab is also owner-only: coursework is private, so a member sees the tab on their own profile and only when they have submitted assignments. (Tutor assignments are a Pro-only feature and are intentionally not surfaced.)
Both tabs, like Courses and Certificates, render through PeepSo’s template stack and
can be overridden from your theme (see the developer guide). The Courses, Instructing,
and Assignments lists are paginated (12 cards per page by default, filterable via
peepso_lms_courses_per_page), so they stay fast for members with large enrollments.

