Skip to content

Instantly share code, notes, and snippets.

@abmiller99
Created September 8, 2022 11:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save abmiller99/409a3acee809bcfd40a389e040f062c2 to your computer and use it in GitHub Desktop.
Save abmiller99/409a3acee809bcfd40a389e040f062c2 to your computer and use it in GitHub Desktop.
Memberpress + Learndash + Mailster + WP Discourse
<?php
// https://docs.memberpress.com/article/325-action-hooks-in-memberpress
add_action('mepr-event-create', 'listen_to_mepr_events');
function listen_to_mepr_events($event) {
$obj = $event->get_data();
//$obj might be a MeprTransaction object or a MeprSubscription object
if(!($obj instanceof MeprTransaction) && !($obj instanceof MeprSubscription)) {
write_log("*** nothing here to do if we're not dealing with a txn or sub ***"); //write to log
return; // nothing here to do if we're not dealing with a txn or sub
}
$member = $obj->user(); // get member object data from event object
$user_id = $member->ID; // get user ID from object
$subscriber = mailster('subscribers')->get_by_wpid($user_id); // Find Mailster ID from Member object
$courses_id = array(2943,2945,2947,2950,13519,17025,17376,20007,22050,22117,22173,22877,23723);
// Learndash Course ids:
// 2943 = Secrets of Charleston
// 2945 = Secrets of Improvisation
// 2947 = World of Kicks
// 2950 = Solo Jazz 101
// 13519 = Variation LAB Vol 1
// 17025 = Variation LAB Vol 2
// 17376 = Variation LAB Vol 3
// 20007 = Variation LAB Vol 4
// 22050 = WOA vol 1
// 22117 = WOA vol 2
// 22173 = WOA vol 3
// 22877 = Practice Games
// 23723 = JazzArms
if($member->is_active_on_membership($obj)) { //active membership
// List ids:
// 1 = Just Newsletter
// 2 = Premium Subscibers | All Website Members
// 4 = 6-Month Members
// 5 = Premium Members
// 6 = Limited Members
// 7 = KSOS Legacy
// 8 = Ult Sec Bundle
// 18 = Promotions
// 22 = Annual Members
// 32 = Monthly Members
// Tag ids:
// 1 = Limited
// 2 = Monthly
// 3 = 6-Month
// 4 = Annual
// 5 = Just Newsletter
// 6 = KSoS legacy
// 7 = Premium
// 8 = Promotions
// 9 = Ultimate Secrets Bundle
if(3780 == $obj->product_id) { //MONTHLY Membership
$list_id_from = array(1,4,5,6,7,18,22); //Remove all other lists
$list_id_to = array(2,32); //All Website Members + Monthly Members
$remove_tags = array(1,3,4,5,6,7,8,9); //Remove all other tags
$add_tags = 2; //Monthly Members
$add_group = 'Ksenia_Basic'; // Discourse Group Name
$remove_groups = ['Ksenia_Essential','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
mailster( 'subscribers' )->unassign_tags( $subscriber->ID, $remove_tags );
mailster( 'subscribers' )->assign_tags( $subscriber->ID, $add_tags, true );
mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to, true );
// Update access to the courses
foreach ($courses_id as $course_id) {
ld_update_course_access($user_id, $course_id, $remove = false);
}
// add to Discourse Group
\WPDiscourse\Utilities\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// remove from Discourse Groups
\WPDiscourse\Utilities\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
else if(3847 == $obj->product_id) { //6 Month (Essential) Membership
$list_id_from = array(1,18,32,22,5,7,6); //Remove all other lists
$list_id_to = array(2,4); //All Website Members + 6 Month Members
$remove_tags = array(1,2,4,5,6,7,8,9); //Remove all other tags
$add_tags = 3; //6 Month Members
$add_group = 'Ksenia_Essential'; // Discourse Group Name
$remove_groups = ['Ksenia_Basic','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
mailster( 'subscribers' )->unassign_tags( $subscriber->ID, $remove_tags );
mailster( 'subscribers' )->assign_tags( $subscriber->ID, $add_tags, true );
mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to, true );
foreach ($courses_id as $course_id) {
ld_update_course_access($user_id, $course_id, $remove = false);
}
// add to Discourse Group
\WPDiscourse\Utilities\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// remove from Discourse Groups
\WPDiscourse\Utilities\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
else if(20865 == $obj->product_id) { //Annual Membership
$list_id_from = array(1,18,4,32,5,7,6); //Just Newsletter + Promotions
$list_id_to = array(2,22); //All Website Members + Annual Members
$remove_tags = array(1,2,3,5,6,7,8,9); //Remove all other tags
$add_tags = 4; //6 Month Members
$add_group = 'Ksenia_Annual'; // Discourse Group Name
$remove_groups = ['Ksenia_Basic','Ksenia_Essential','Ksenia_Premium','Ksenia_Free'];
mailster( 'subscribers' )->unassign_tags( $subscriber->ID, $remove_tags );
mailster( 'subscribers' )->assign_tags( $subscriber->ID, $add_tags, true );
mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to, true );
foreach ($courses_id as $course_id) {
ld_update_course_access($user_id, $course_id, $remove = false);
}
// add to Discourse Group
\WPDiscourse\Utilities\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// remove from Discourse Groups
\WPDiscourse\Utilities\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
else if(3848 == $obj->product_id) { //Premium Membership
$list_id_from = array(1,18,4,32,22,7,6); //Just Newsletter + Promotions
$list_id_to = array(2,5); //All Website Members + Premium Members
$remove_tags = array(1,2,3,4,5,6,8,9); //Remove all other tags
$add_tags = 7; //6 Month Members
$add_group = 'Ksenia_Premium'; // Discourse Group Name
$remove_groups = ['Ksenia_Basic','Ksenia_Essential','Ksenia_Annual','Ksenia_Free'];
mailster( 'subscribers' )->unassign_tags( $subscriber->ID, $remove_tags );
mailster( 'subscribers' )->assign_tags( $subscriber->ID, $add_tags, true );
mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to, true );
// add to Discourse Group
\WPDiscourse\Utilities\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// remove from Discourse Groups
\WPDiscourse\Utilities\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
else if(1405 == $obj->product_id) { //Ult Sec Bundle 1
$list_id_from = array(1,18); //Just Newsletter + Promotions
$list_id_to = array(2,8); //All Website Members + Ultimate Secrets Bundle (legacy)
$remove_tags = array(1,2,3,4,5,6,7,8); //Remove all other tags
$add_tags = 9; //Ultimate Secrets Bundle
mailster( 'subscribers' )->unassign_tags( $subscriber->ID, $remove_tags );
mailster( 'subscribers' )->assign_tags( $subscriber->ID, $add_tags, true );
mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to, true );
}
else if(1595 == $obj->product_id) { //Ult Sec Bundle 2
$list_id_from = array(1,18); //Just Newsletter + Promotions
$list_id_to = array(2,8); //All Website Members + Ultimate Secrets Bundle (legacy)
$remove_tags = array(1,2,3,4,5,6,7,8); //Remove all other tags
$add_tags = 9; //Ultimate Secrets Bundle
mailster( 'subscribers' )->unassign_tags( $subscriber->ID, $remove_tags );
mailster( 'subscribers' )->assign_tags( $subscriber->ID, $add_tags, true );
mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to, true );
}
else if(1918 == $obj->product_id) { //Expanded Sec Bundle
$list_id_from = array(1,18); //Just Newsletter + Promotions
$list_id_to = array(2,8); //All Website Members + Ultimate Secrets Bundle (legacy)
$remove_tags = array(1,2,3,4,5,6,7,8); //Remove all other tags
$add_tags = 9; //Ultimate Secrets Bundle
mailster( 'subscribers' )->unassign_tags( $subscriber->ID, $remove_tags );
mailster( 'subscribers' )->assign_tags( $subscriber->ID, $add_tags, true );
mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to, true );
}
else if(1987 == $obj->product_id) { //Ksenia’s Secrets of Solo: 1 Year Membership (legacy)
$list_id_from = array(1,18); //Just Newsletter + Promotions
$list_id_to = array(2,7); //All Website Members + KSoS (legacy)
$remove_tags = array(1,2,3,4,5,7,8,9); //Remove all other tags
$add_tags = 6; //KSoS legacy
$add_group = 'Ksenia_Premium'; // Discourse Group Name
$remove_groups = ['Ksenia_Basic','Ksenia_Essential','Ksenia_Annual','Ksenia_Free'];
mailster( 'subscribers' )->unassign_tags( $subscriber->ID, $remove_tags );
mailster( 'subscribers' )->assign_tags( $subscriber->ID, $add_tags, true );
mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to, true );
// add to Discourse Group
\WPDiscourse\Utilities\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// remove from Discourse Groups
\WPDiscourse\Utilities\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
else if(1719 == $obj->product_id) { //Ksenia’s Secrets of Solo: 6 Month Membership (legacy)
$list_id_from = array(1,18,); //Just Newsletter + Promotions
$list_id_to = array(2,7); //All Website Members + KSoS (legacy)
$remove_tags = array(1,2,3,4,5,7,8,9); //Remove all other tags
$add_tags = 6; //KSoS legacy
$add_group = 'Ksenia_Essential'; // Discourse Group Name
$remove_groups = ['Ksenia_Basic','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
mailster( 'subscribers' )->unassign_tags( $subscriber->ID, $remove_tags );
mailster( 'subscribers' )->assign_tags( $subscriber->ID, $add_tags, true );
mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to, true );
// add to Discourse Group
\WPDiscourse\Utilities\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// remove from Discourse Groups
\WPDiscourse\Utilities\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
else if(1674 == $obj->product_id) { //Ksenia’s Secrets of Solo: All Access Membership (legacy)
$list_id_from = array(1,18); //Just Newsletter + Promotions
$list_id_to = array(2,7); //All Website Members + KSoS (legacy)
$remove_tags = array(1,2,3,4,5,7,8,9); //Remove all other tags
$add_tags = 6; //KSoS legacy
$add_group = 'Ksenia_Basic'; // Discourse Group Name
$remove_groups = ['Ksenia_Essential','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
mailster( 'subscribers' )->unassign_tags( $subscriber->ID, $remove_tags );
mailster( 'subscribers' )->assign_tags( $subscriber->ID, $add_tags, true );
mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to, true );
// add to Discourse Group
\WPDiscourse\Utilities\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// remove from Discourse Groups
\WPDiscourse\Utilities\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
else if(1403 == $obj->product_id) { //Secrets of Improvisation PRO
$list_id_from = array(1,18); //Just Newsletter + Promotions
$list_id_to = array(2,7); //All Website Members + KSoS (legacy)
$remove_tags = array(1,2,3,4,5,7,8,9); //Remove all other tags
$add_tags = 6; //KSoS legacy
$add_group = 'Ksenia_Basic'; // Discourse Group Name
$remove_groups = ['Ksenia_Essential','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
mailster( 'subscribers' )->unassign_tags( $subscriber->ID, $remove_tags );
mailster( 'subscribers' )->assign_tags( $subscriber->ID, $add_tags, true );
mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to, true );
// add to Discourse Group
\WPDiscourse\Utilities\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// remove from Discourse Groups
\WPDiscourse\Utilities\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
else if(1404 == $obj->product_id) { //Secrets of Improvisation ULTIMATE
$list_id_from = array(1,18); //Just Newsletter + Promotions
$list_id_to = array(2,7); //All Website Members + KSoS (legacy)
$remove_tags = array(1,2,3,4,5,7,8,9); //Remove all other tags
$add_tags = 6; //KSoS legacy
mailster( 'subscribers' )->unassign_tags( $subscriber->ID, $remove_tags );
mailster( 'subscribers' )->assign_tags( $subscriber->ID, $add_tags, true );
mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to, true );
}
else if(408 == $obj->product_id) { //Secrets of the Charleston 20’s PRO
$list_id_from = array(1,18); //Just Newsletter + Promotions
$list_id_to = array(2,7); //All Website Members + KSoS (legacy)
$remove_tags = array(1,2,3,4,5,7,8,9); //Remove all other tags
$add_tags = 6; //KSoS legacy
$add_group = 'Ksenia_Basic'; // Discourse Group Name
$remove_groups = ['Ksenia_Essential','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
mailster( 'subscribers' )->unassign_tags( $subscriber->ID, $remove_tags );
mailster( 'subscribers' )->assign_tags( $subscriber->ID, $add_tags, true );
mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to, true );
// add to Discourse Group
\WPDiscourse\Utilities\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// remove from Discourse Groups
\WPDiscourse\Utilities\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
else if(409 == $obj->product_id) { //Secrets of the Charleston 20’s ULTIMATE
$list_id_from = array(1,18); //Just Newsletter + Promotions
$list_id_to = array(2,7); //All Website Members + KSoS (legacy)
$remove_tags = array(1,2,3,4,5,7,8,9); //Remove all other tags
$add_tags = 6; //KSoS legacy
mailster( 'subscribers' )->unassign_tags( $subscriber->ID, $remove_tags );
mailster( 'subscribers' )->assign_tags( $subscriber->ID, $add_tags, true );
mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to, true );
}
else if(407 == $obj->product_id) { //Limited Membership
$list_id_from = 2; //All Website Members
$list_id_to = 6; //Limited Members
$remove_tags = array(2,3,4,5,6,7,8,9); //Remove all other tags
$add_tags = 1; //Limited Membership
$add_group = 'Ksenia_Free'; // Discourse Group Name
$remove_groups = ['Ksenia_Essential','Ksenia_Premium','Ksenia_Basic','Ksenia_Annual'];
mailster( 'subscribers' )->unassign_tags( $subscriber->ID, $remove_tags );
mailster( 'subscribers' )->assign_tags( $subscriber->ID, $add_tags, true );
mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to, true );
foreach ($courses_id as $course_id) {
ld_update_course_access($user_id, $course_id, $remove = true);
}
// add to Discourse Group
\WPDiscourse\Utilities\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// remove from Discourse Groups
\WPDiscourse\Utilities\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
//write to log
write_log('*** ---- SUCCESS ---- ***');
write_log('*-- The event object --*');
write_log($event);
write_log('*-- for member object--*');
write_log($member);
write_log('*-- WP User ID: --*');
write_log($user_id);
write_log('*-- Mailster subscriber ID: --*');
write_log($subscriber);
write_log('*-- list (removed) --*');
write_log($list_id_from);
write_log('*-- list (added) --*');
write_log($list_id_to);
write_log('*-- tags (removed) --*');
write_log($remove_tags);
write_log('*-- tags (added) --*');
write_log($add_tags);
write_log('*-- Jam Circle Group (added) --*');
write_log($add_group);
write_log('*-- Jam Circle Group (removed) --*');
write_log($remove_groups);
write_log('*** ---- END ---- ***');
}
else { //no matches
// $subscriber = mailster('subscribers')->get_by_wpid();
// $list_id_from = 2; //All Website Members
// $list_id_to = 1; //Just Newsletter
// mailster( 'subscribers' )->unassign_lists( $subscriber->ID, $list_id_from );
// mailster( 'subscribers' )->assign_lists( $subscriber->ID, $list_id_to );
// write_log("**NOT FOUND** The event '$event' for member {'$member'} removed from {'$list_id_from'} & added to list {'$list_id_to'}"); //write to log
write_log("**NOT FOUND - NO MATCHES for (is_active_on_membership) **"); //write to log
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment