Last active
June 6, 2023 21:33
-
-
Save aayla-secura/a5c6e81553fc27ccf01fcbb642e6b089 to your computer and use it in GitHub Desktop.
GetPaid Wordpress plugin: Code snippet to assign user roles per subscription
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 | |
function subscription_user_role_dbg_log( $data ) { | |
// error_log( print_r( $data, true ) ); | |
} | |
function edit_member_role( $method, $subscription ) { | |
$roles = array( | |
// <name of item> => <slug of wordpress user role> | |
"Class Membership" => "class_member", | |
"Centre Membership" => "centre_member", | |
"Study Membership" => "study_member", | |
"Great Benefactor" => "great_benefactor", | |
); | |
$user_id = $subscription->get_customer_id(); | |
$mem_product = get_the_title( $subscription->get_product_id() ); | |
subscription_user_role_dbg_log( "Called edit_member_role with {$method}, {$user_id}, {$mem_product}" ); | |
$user = get_userdata( $user_id ); | |
if ( $user == false ) { | |
return; | |
} | |
subscription_user_role_dbg_log( "edit_member_role found a user with ID {$user_id}" ); | |
if ( !array_key_exists( $mem_product, $roles ) ) { | |
subscription_user_role_dbg_log( "edit_member_role did not find a user role for product {$mem_product}" ); | |
return; | |
} | |
subscription_user_role_dbg_log( "edit_member_role found a user role for product {$mem_product} => {$roles[$mem_product]}. Using {$method}" ); | |
$user->$method( $roles[$mem_product] ); | |
} | |
add_action( 'getpaid_subscription_status_changed', 'set_user_role_on_change_subscription_status', 10, 3 ); | |
function set_user_role_on_change_subscription_status( $subscription, $from, $to ) { | |
subscription_user_role_dbg_log( 'Called set_user_role_on_change_subscription_status' ); | |
if ( in_array( $to, array('active', 'trialling')) ) { | |
$method = 'add_role'; | |
} else { | |
$method = 'remove_role'; | |
} | |
edit_member_role( $method, $subscription ); | |
} | |
// do we need to hook into both of these, or just getpaid_delete_subscription? | |
add_action( 'getpaid_delete_subscription', 'set_user_role_on_delete_subscription', 10, 1 ); | |
add_action( 'getpaid_authenticated_admin_action_subscription_manual_delete', 'set_user_role_on_delete_subscription', 10, 1 ); | |
function set_user_role_on_delete_subscription( $subscription ) { | |
subscription_user_role_dbg_log( 'Called set_user_role_on_delete_subscription' ); | |
edit_member_role( 'remove_role', $subscription ); | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment