Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save pbrocks/b3eb260c7a56aef10504ffebe347c6bd to your computer and use it in GitHub Desktop.
Save pbrocks/b3eb260c7a56aef10504ffebe347c6bd to your computer and use it in GitHub Desktop.
Change PMPro membership level upon expiration or cancellation to different respective levels based on member's previous level.
<?php
/**
* When users cancel (are changed to membership level 0) we give them another "cancelled" level.
* Can be used to downgrade someone to a free level when they cancel.
* Will allow members to the "cancel level" to cancel from that though.
*/
function pmpro_after_expiration_change_membership_levels( $level_id, $user_id ) {
// set this to the id of the level you want to give members when they cancel
$last_level_5 = 5;
$last_level_6 = 6;
$level_5_cancel_id = 2;
$level_6_cancel_id = 3;
// if we see this global set, then another gist is planning to give the user their level back
global $pmpro_next_payment_timestamp;
if ( ! empty( $pmpro_next_payment_timestamp ) ) {
return;
}
// are they cancelling?
if ( 0 === $level_id ) {
// check if they are cancelling from level $cancel_level_id
global $wpdb;
$last_level_id = $wpdb->get_var( "SELECT membership_id FROM $wpdb->pmpro_memberships_users WHERE user_id = '" . $user_id . "' ORDER BY id DESC" );
if ( $last_level_5 === $last_level_id ) {
// otherwise give them level $cancel_level_id instead
pmpro_changeMembershipLevel( $level_5_cancel_id, $user_id );
} elseif ( $last_level_6 === $last_level_id ) {
// otherwise give them level $cancel_level_id instead
pmpro_changeMembershipLevel( $level_6_cancel_id, $user_id );
} else {
return; // let them cancel
}
}
}
add_action( 'pmpro_after_change_membership_level', 'pmpro_after_expiration_change_membership_levels', 10, 2 );
@ArmandoValencia
Copy link

Im afraid this code doesn't work. using the code as it is, lets final membership be 0 (membership gets removed anyway).

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