Skip to content

Instantly share code, notes, and snippets.

@aayla-secura
Last active June 6, 2023 21:33
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 aayla-secura/a5c6e81553fc27ccf01fcbb642e6b089 to your computer and use it in GitHub Desktop.
Save aayla-secura/a5c6e81553fc27ccf01fcbb642e6b089 to your computer and use it in GitHub Desktop.
GetPaid Wordpress plugin: Code snippet to assign user roles per subscription
<?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