Skip to content

Instantly share code, notes, and snippets.

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 kimcoleman/76aa6bd9da2506ba53beaa41d6ba497e to your computer and use it in GitHub Desktop.
Save kimcoleman/76aa6bd9da2506ba53beaa41d6ba497e to your computer and use it in GitHub Desktop.
Retroactively assign a user to a Parent account when using the Sponsored Members Add On.
/**
* Retroactively assign a user to a Parent account when using the Sponsored Members Add On.
* Enter the user ID of parent account in the "Assign to Parent Account" on the "Edit Profile" screen.
*
* Note: The user's active Membership Level must be the correct "Child" level for that Parent/Child relationship.
*
*/
function pmprosm_assign_child_members( $profileuser ) {
if ( function_exists( 'pmprosm_getSponsor' ) && current_user_can( 'edit_users' ) ) {
// Get the parent for this user.
$parent = pmprosm_getSponsor( $profileuser->ID );
if ( ! empty( $parent ) ) {
$parent_id = $parent->ID;
} else {
$parent_id = '';
}
// Show the field to update the parent for this user.
if ( empty( $parent_id ) ) { ?>
<table class="form-table">
<tr>
<th>
<label for="assign_child_member"><?php _e('Assign to Parent Account'); ?></label>
</th>
<td>
<input type="text" value="<?php echo $parent_id; ?>" name="assign_child_member" id="assign_child_member" />
<p class="description">Enter the Parent Account's user ID for this user.</p>
</td>
</tr>
</table>
<?php
}
}
}
add_action( 'show_user_profile', 'pmprosm_assign_child_members', 20, 1 );
add_action( 'edit_user_profile', 'pmprosm_assign_child_members', 20, 1 );
function pmprosm_profile_assign_child_members( $user_id, $old_user_data ) {
if ( isset( $_POST[ 'assign_child_member' ] ) && (int)( $_POST[ 'assign_child_member' ] ) ) {
// Get the vars.
$parent_id = $_POST[ 'assign_child_member' ];
$sponsored_code = pmprosm_getCodeByUserID( $parent_id );
$membership_level_id = (int)$_POST[ 'membership_level' ];
// Check that the user has a child level.
if ( pmprosm_isSponsoredLevel( $membership_level_id ) ) {
// Set their new membership level and assign their sponsor.
pmprosm_changeMembershipLevelWithCode( $membership_level_id, $user_id, $sponsored_code );
pmprosm_addDiscountCodeUse( $user_id, $membership_level_id, $sponsored_code );
}
}
}
add_action( 'profile_update', 'pmprosm_profile_assign_child_members', 10, 2 );
@kimwhite
Copy link

kimwhite commented Oct 5, 2020

The "Assign to Parent Account" is showing up on a Members Profile in the backend. Can it be made "Admin Only"?

@kimcoleman
Copy link
Author

The "Assign to Parent Account" is showing up on a Members Profile in the backend. Can it be made "Admin Only"?

I just made this update. I also updated to hide the form if the user already has a parent. In testing again there is going to be orphaned relationships from the old parent to the new parent if using this function to swap parent accounts or "remove" them.

A more robust process for managing this should be built into the Add On at some point.

@laurenhagan0306
Copy link

This recipe is included in the blog post on "Assign a “Parent” Account to an Existing User or Member: Sponsored Members Add On Recipe" at Paid Memberships Pro here: https://www.paidmembershipspro.com/assign-parent-to-user-sponsored-members-add-on-recipe/

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