Skip to content

Activity & Certificates

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.

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.

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.

An activity is posted only when all of these pass:

  1. the type’s site-level toggle is on, and
  2. 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 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.)

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.