Last active
September 15, 2023 12:26
-
-
Save ronalfy/0b4e9bcf4018f77e1e51a8c8bb3ad93a to your computer and use it in GitHub Desktop.
Paid Memberships Pro - Add On Packages Plus LearnDash
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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/