Skip to content

Instantly share code, notes, and snippets.

@ronalfy
Last active September 15, 2023 12:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ronalfy/0b4e9bcf4018f77e1e51a8c8bb3ad93a to your computer and use it in GitHub Desktop.
Save ronalfy/0b4e9bcf4018f77e1e51a8c8bb3ad93a to your computer and use it in GitHub Desktop.
Paid Memberships Pro - Add On Packages Plus LearnDash
<?php
global $pmpro_addon_pages_for_courses;
// 28 is the page ID; 24 is the course ID.
// 30 is the page ID; 26 is the course ID.
$pmpro_addon_pages_for_courses = array(
28 => 24,
30 => 26,
);
function pmproap_learndash_template_redirect()
{
global $post, $pmpro_addon_pages_for_courses, $current_user;
$course_id = $post->ID;
if ( is_archive() ) {
return;
}
//make sure both pmpro and wp courseware are loaded
if(!function_exists("pmpro_has_membership_access") || !function_exists("learndash_user_get_enrolled_courses"))
return;
//lock down units
if(!empty($post) && $post->post_type == "sfwd-courses")
{
$courses2pages = array_flip($pmpro_addon_pages_for_courses);
if ( ! array_key_exists( $course_id, $courses2pages ) ) {
return;
}
if ( ! is_user_logged_in() ) {
wp_redirect( get_permalink( $courses2pages[ $course_id ] ) );
exit;
}
$courses = learndash_user_get_enrolled_courses( $current_user->ID );
if ( empty( $courses ) ) {
wp_redirect( get_permalink( $courses2pages[ $course_id ] ) );
exit;
}
$available_courses = array_diff( $courses, array_values( $pmpro_addon_pages_for_courses ) );
// Courses match page mapping.
if ( empty( $available_courses ) ) {
if ( ! in_array( $course_id, $courses, true ) ) {
wp_redirect( get_permalink( $courses2pages[ $course_id ] ) );
exit;
}
}
}
}
add_action('template_redirect', 'pmproap_learndash_template_redirect');
// Redirect logged in users to their course.
function pmproap_learndash_course_page_template_redirect() {
if ( ! is_page() || ! is_user_logged_in() ) {
return;
}
global $post, $pmpro_addon_pages_for_courses, $current_user;
if ( ! isset( $pmpro_addon_pages_for_courses[ $post->ID ] ) ) {
return;
}
// Determine if we're enrolled in the course for this page.
$course_id = $pmpro_addon_pages_for_courses[ $post->ID ];
$courses = learndash_user_get_enrolled_courses( $current_user->ID );
if ( in_array( $course_id, $courses, true ) ) {
wp_redirect( get_permalink( $course_id ) );
exit;
}
}
add_action('template_redirect', 'pmproap_learndash_course_page_template_redirect');
/*
When purchasing a page, give them access to the corresponding course.
*/
function learndash_pmproap_action_add_to_package($user_id, $post_id)
{
global $pmpro_addon_pages_for_courses, $current_user;
//make sure both pmpro and wp courseware are loaded
if(!function_exists("pmpro_has_membership_access") || !function_exists("learndash_user_set_enrolled_courses"))
return;
//course for this page?
if(!empty($pmpro_addon_pages_for_courses[$post_id]))
{
$courses = learndash_user_get_enrolled_courses( $current_user->ID );
$courses[] = $pmpro_addon_pages_for_courses[$post_id];
array_unique( $courses );
learndash_user_set_enrolled_courses($user_id, $courses);
}
}
add_action('pmproap_action_add_to_package', 'learndash_pmproap_action_add_to_package', 10, 2);
/*
When losing access to a page, remove access to the corresponding course.
*/
function learndash_pmproap_action_remove_from_package($user_id, $post_id)
{
global $pmpro_addon_pages_for_courses;
//make sure both pmpro and wp courseware are loaded
if(!function_exists("pmpro_has_membership_access") || !function_exists("ld_update_course_access"))
return;
//course for this page?
if(!empty($pmpro_addon_pages_for_courses[$post_id]))
{
ld_update_course_access( $user_id, $pmpro_addon_pages_for_courses[$post_id], true );
}
}
add_action('pmproap_action_remove_from_package', 'learndash_pmproap_action_remove_from_package', 10, 2);
@laurenhagan0306
Copy link

This recipe is included in the blog post on "Sell Single Courses using LearnDash and PMPro" at Paid Memberships Pro here: https://www.paidmembershipspro.com/sell-single-courses-learndash-paid-memberships-pro/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment