Welcome to a new era of online education and membership management with the Courses for Membership Add On for Paid Memberships Pro. Choose the Courses for Membership Add On and get these key benefits:

  • Native Course Features: Create and organize basic courses with ease. Our intuitive interface allows you to design compelling courses, complete with lessons and rich media content, without needing any technical expertise.
  • Seamless Integration with Leading WordPress LMS: Enjoy flawless compatibility with top-tier Learning Management Systems like LifterLMS, LearnDash, Sensei, and Tutor LMS. This Add On bridges the gap between your courses and membership management, ensuring a smooth user experience.
  • Versatile Membership Management: Built for true membership sites, where member features are more than just a course. Effortlessly manage member access and customize your content for different membership levels. You have complete control over who accesses your content, enhancing both security and exclusivity.
  • Cost-Effective Solution: As a free Add On available in the WordPress Repository, this plugin offers an affordable yet robust solution to create and manage your online courses without compromising on quality and features.

Explore our Courses Hub for more information about launching your Course membership website.

Installation

  1. Navigate to Plugins > Add New in the WordPress admin.
  2. Search for the plugin by name.
  3. Click “Install”, then “Activate”.

Navigate to Memberships > Courses in the WordPress admin to configure modules.

Video: How to Create a Simple Course in WordPress

How to Create Courses and Lessons

The default courses module organizes your course content, protects access by membership level, and tracks lesson completion.

  • Create an unlimited number of courses and lessons
  • Organize courses by category
  • Protect lesson content by membership level
  • Allow members to track lesson completion

Here’s how to set up the default courses module for Paid Memberships Pro (no third-party LMS plugin required):

  1. Install and Activate Plugins

    You will need Paid Memberships Pro and our Courses for Membership Add On (free) installed and activated on your site.

  2. Navigate to Memberships > Courses

    Check the box for Default to enable the course and lesson post types bundled with this plugin.

  3. Save Settings

    Save the module selection.

  4. Create Lessons

    Navigate to Courses > Add Lesson to create your lessons. Individual lessons in a protected course are not accessible for non-members. For help outlining your course structure, check out the Courses Hub here.

  5. Optional: Set Up Course Categories

    Navigate to Courses > Course Categories to create or manage course categories.

  6. Create a Course

    Navigate to Courses > Add Course to create a course. The course content is, by default, visible to anyone browsing your site. Imagine this page content is the sales copy that entices people to purchase access. Assign the course to categories (optional).

  7. Organize Lessons in the Course

    In the Lessons metabox (below the post editor), add the lessons you want to offer in this course. Reorder lessons by clicking Edit and changing the numeric order. This order is not shown to members, so you can leave gaps like 10, 20, 30 in case you want to squeeze in lessons later.

  8. Protect Course Access

    In the Settings sidebar, locate the Require Membership metabox. Check any membership levels that you want to allow access for this course.

  9. Save Changes

    Save and update your course. That’s it. The course is now protected for the chosen memberships levels.

How to Rebuild Permalinks

Note: You may initially see a ‘404: Page Not Found’ error when trying to view a built-in Course or Lesson post type. Here’s the steps to fix that:

  • Navigate to Settings > Permalinks
  • Click “Save Changes

This step “flushes the rewrite rules” in your WordPress site and allows the Course and Lesson custom post types to use your default rewrite rules.

Courses Catalog Archive Page

The default module has an option to enable to disable the archive page for your courses. This archive will use your theme’s default post archive layout.

  • Navigate to Memberships > Courses in the WordPress admin.
  • Choose a setting for the Enable Archive Page for the Default Courses CPT? option. If checked if, your site will show an archive of all courses at yoursite.com/courses/

Note: It’s useful to disable this archive if you are building your own catalog 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 this URL.

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).

Integrate with Third Party LMS Plugins

This Add On also supports integration with third party elearning plugins. In most cases, you will only need to have one module active at a time.

Refer to the individual documentation pages for help with these modules:

  • LifterLMS: Enable the LifterLMS module to enable course protection by membership level for your courses in LifterLMS.
  • LearnDash: Enable the LearnDash module to enable course protection by membership level for your courses in the LearnDash LMS.
  • Sensei: Enable the Sensei module to enable course protection by membership level for your courses in Sensei.
  • Tutor LMS: Enable the Tutor LMS module to enable course protection by membership level for your courses in Tutor LMS.
Nugget in LifterLMS logo

LifterLMS: The Preferred Open Source LMS for PMPro Sites

Seamlessly integrate your Paid Memberships Pro membership site with LifterLMS to offer exclusive courses to your members.

Using the Streamlined Compatibility Mode allows Paid Memberships Pro to exclusively manage course access and restrictions, simplifying the membership management process.

Screenshots

Screenshot of PMPro Courses Add On Settings
Settings page to enable course modules for built-in CPT, Enable Archive Page for the Default Courses CPT, LifterLMS, LearnDash, Sensei LMS and Tutor LMS.
Courses post type screen shows number of lessons and required membership levels.
Courses post type screen shows number of lessons and required membership levels.
Edit a single course to add public overview content, add and reorder lessons, categorize the courese, and add membership requirements.
Edit a single course to add public overview content, add and reorder lessons, categorize the courese, and add membership requirements.
A course page on the site frontend showing overview content, a registration box with required levels, and a list of lessons.
A course page on the site frontend showing overview content, a registration box with required levels, and a list of lessons.

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.