This is a multi-purpose plugin that offers native course features and includes integration modules for top LMS/e-learning plugins for WordPress.
Try a Demo: View the Courses demo site or launch a free private demo now.
Explore our Courses Hub for more information about launching your Course membership website.
Table of contents
Native Course Creation and Supported Modules
- Use the default module to organize course content, protect access by membership level, and track lesson completion by user.
- Or, use the Courses for Membership Add On alongside your favorite LMS plugin to restrict course access by membership level. Supported modules include:
Installation
- Install the Add On via the Plugins > Add New in the WordPress dashboard. Or, upload the
pmpro-courses
directory to the/wp-content/plugins/
directory of your site. - Activate the plugin through the ‘Plugins’ menu in WordPress.
- Navigate to Memberships > Courses in the WordPress admin to configure modules.
Configure Course Modules
The Courses settings page controls which modules are active in your membership site. In most cases, you will only need to have one module active at a time. Navigate to Memberships > Courses to choose from the following settings:
- Default Module: Use the built-in course and lesson custom post types to build a basic e-learning component in your WordPress membership site.
- LearnDash: Enable the LearnDash module to enable course protection by membership level for your courses in the LearnDash LMS.
- LifterLMS: Enable the LifterLMS module to enable course protection by membership level for your courses in LifterLMS.
- Sensei: Enable the Sensei LMS module to enable course protection by membership level for your courses in Sensei.
- TutorLMS: Enable the TutorLMS module to enable course protection by membership level for your courses in TutorLMS.
Use the Default Course and Lesson Module
The default courses module organizes your course content, protects access by membership level, and tracks lesson completion. You can create an unlimited number of courses and lessons, organize them by your course categories, protect lesson content by membership level, and allow members to track lesson completion.
First, navigate to Memberships > Courses > Settings and check the box “Default” to enable the Course and Lesson post types bundled with PMPro Courses.
Leave the “Enable Archive Page for the Default Courses CPT?” option checked if you want the /courses/ URL of your site to show an archive of all courses. Note: It’s useful to disable this if you are building your own archive page some other way or have another LMS plugin active at the same time and want to allow that other plugin to control what shows up at /courses/.
After you save settings, a new “Courses” menu item will be added to your WordPress admin area.
- Use the ‘Courses’ page in the WordPress admin to create a new course or edit existing courses.
- Navigate to Courses > Lessons to create new lessons or edit existing lessons.
- Navigate to Courses > Course Categories to create or manage course categories.
Video: How to Create a Simple Course in WordPress
Create and Edit Courses
The Courses post editor accepts general course post content just like any WordPress block editor experience. By default, the full course content displays for all users, even for member protected courses. We believe that your course landing page is the “sales content” that encourages membership signups. Individual lessons in a protected course are not accessible for non-members.
- The “Course Category” metabox lets you categorize your course.
- The “Lessons” metabox has tools to add, remove, and reorder lessons within the course.
- The “Require Membership” metabox on the Edit Course screen protects this course by membership level.
Course and lessons can be public or require membership. When a course requires membership, every lesson within that course is automatically protected. Non-members cannot view a single lesson page in a protected course. If they happen to know a lesson’s URL, the logic in this plugin redirects them to the course page.
Shortcodes Available in the Default Courses Module
[pmpro_my_courses limit="3"]
Show a list of courses that the current logged in user can access as part of their membership level. This shortcode accepts one attribute: limit
. If you do not add this attribute the shortcode will show all courses for the member (no limit).
[pmpro_all_courses limit="10"]
Show all courses available in the site, regardless of whether the visitor or user can access them. This shortcode accepts one attribute: limit
. If you do not add this attribute the shortcode will show all courses in the site (no limit).
Protect LifterLMS Courses
LifterLMS is an e-learning plugin for WordPress that is available for free in the WordPress.org plugin repository. The software includes courses, lessons, quizzes, achievement badges, and more. Our Courses for Membership Add On creates a bridge between the content protections of PMPro and the course functionality of LifterLMS.
LifterLMS includes their own features for course enrollment and course membership. You should use this Add On if you are not using their membership features and instead want PMPro to manage your members and membership registrations. This Add On is specifically written to enroll and unenroll members from the courses available for their level.
- To protect your course, navigate to Memberships > Courses and check the box “LifterLMS” to enable the LifterLMS module. Then, save settings.
- Now, edit your LifterLMS course and locate the “Require Membership” metabox. Check any memberships levels that you want to allow access for this course. Then, save and update your course.
- We recommend disabling the Basic and Email Enrollment notifications for students on the LifterLMS > Settings > Notifications page in the WordPress admin. More information about LifterLMS notifications can be found in their documentation.
- If a user viewing your course does not have the correct membership level, they will see the protected content message as specified in the Memberships > Settings > Advanced area of your WordPress admin.
- When a new member completes checkout, they are automatically enrolled into all courses for their level. If a member changes level, they are also unenrolled from any course that aren’t offered for their level.
You do not need to set up any LifterLMS Access Plans, registration pages, or other membership related functionality to use this Add On for course protection.
Protect LearnDash Courses
LearnDash turns your WordPress site into a learning management system. This premium software manages various e-learning components including courses, lessons, sections, topics, and quizzes. Our Courses for Membership Add On creates a bridge between the content protections of PMPro and the course functionality of LearnDash.
- To protect your LearnDash courses, navigate to Memberships > Courses and check the box “LearnDash” to enable the LearnDash module. Then, save settings.
- Now, edit your LearnDash course and locate the “Require Membership” metabox. Check any memberships levels that you want to allow access for this course.
- Set the Course Access Settings to “Closed”. Then, save and update your course. Refer to the LearnDash documentation for more information on Course Access Settings.
- Optional: Set the “Course Content” to “Only visible to enrollees” on the Display and Content Options screen. Refer to the LearnDash documentation for more information on Course Display & Content Settings.
- If a user viewing your course does not have the correct membership level, they will see the protected content message as specified in the Memberships > Settings > Advanced area of your WordPress admin.
- When a new member completes checkout, they are automatically enrolled into all courses for their level. If a member changes level, they are also unenrolled from any course that aren’t offered for their level.
Protect Sensei LMS Courses
Sensei is an e-learning WordPress plugin by the makers of WooCommerce and Jetpack. The software includes courses, lessons, quizzes, and more. Our Courses for Membership Add On creates a bridge between the content protections of PMPro and the course functionality of Sensei.
- To protect your course, navigate to Memberships > Courses and check the box “SenseiLMS” to enable the module. Uncheck the “Default” box. Then, save settings.
- Now, edit your Sensei Course and locate the “Require Membership” metabox. Check any memberships levels that you want to allow access for this course. Then, save and update your course.
A protected course means that non-members cannot access the lessons within the course. On the main course page, however, some aspects of the course details remain visible to the public (regardless of their membership level).
To make content on your course’s landing page private for members only, place the individual Sensei LMS course block elements within the Require Membership block or shortcode.
- If a user viewing your course does not have the correct membership level, they will see the protected content message as specified in the Memberships > Settings > Advanced area of your WordPress admin.
- When a new member completes checkout, they are automatically enrolled into all courses for their level. If a member changes levels, they are also unenrolled from any courses that aren’t offered for their new level.
You do not need to set up any Sensei Pro pricing, plans, registration pages, or other membership-related functionality to use this Add On for course protection.
Protect TutorLMS Courses
TutorLMS is an e-learning WordPress plugin by Themeum. The software includes courses, lessons, a teacher and student dashboard, quizzes, and more. Our Courses for Membership Add On creates a bridge between the content protections of PMPro and the course functionality of TutorLMS.
- To protect your course, navigate to Memberships > Courses and check the box “TutorLMS” to enable the module. Then, save settings.
- Now, create your TutorLMS Course and locate the “Require Membership” metabox. Check any membership levels that you want to allow access for this course. Then, save and update your course.
- If a user viewing your course does not have the correct membership level, they will see the protected content message as specified in the Memberships > Settings > Advanced area of your WordPress admin.
- When a new member completes checkout, they are automatically enrolled into all courses for their level. If a member changes levels, they are also unenrolled from any courses that aren’t offered for their new level.
You do not need to set up any TutorLMS registration pages, or other user-related functionality to use this Add On for course protection.
Existing Members and Course Enrollment
This Add On does not include any update scripts to manage course enrollment for existing members. This caveat only applies to the four third party modules integrated with the Courses for Membership Add On. Our native courses module does not rely on enrollment functionality.
All members who have an existing membership level will not be automatically enrolled in a course once you add protection. Course protection and enrollment is hooked in the level change event: only new members or members that cancel or change their level will be updated. You must manually add current members to newly protected courses, and you must manually remove enrolled users that do not have the correct membership level for access.
Screenshots




Action and Filter Hooks
Below are the most commonly used action and filter hooks.
apply_filters( 'pmpro_courses_modules', $modules );
apply_filters( 'pmpro_courses_course_redirect_to', null );
apply_filters( 'pmpro_courses_lesson_redirect_to', get_permalink( $post->post_parent ) );
apply_filters( 'pmpro_courses_get_courses_html', $temp_content, $courses );
apply_filters( 'pmpro_courses_get_lessons_html', $temp_content, $course_id, $lessons );
apply_filters( 'pmpro_courses_show_course_content_to_nonmembers', true );
apply_filters( 'register_post_type_args', array $args, string $post_type )
This is a Free Add On.
Create a free account or log in to gain access to downloads and documentation.