Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

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 kimcoleman/372737291b7aceaba19120dadba106bb to your computer and use it in GitHub Desktop.
Save kimcoleman/372737291b7aceaba19120dadba106bb to your computer and use it in GitHub Desktop.
Place a PMPro member in another level when they cancel... unless they are cancelling from that 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 my_pmpro_after_change_membership_level_default_level( $level_id, $user_id ) {
// Set this to the id of the level you want to give members when they cancel.
$cancel_level_id = 1;
// 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 ( $level_id == 0 ) {
// 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_id == $cancel_level_id ) {
return; // Let them cancel.
}
// Otherwise give them level $cancel_level_id instead.
pmpro_changeMembershipLevel( $cancel_level_id, $user_id );
}
}
add_action( 'pmpro_after_change_membership_level', 'my_pmpro_after_change_membership_level_default_level', 10, 2);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment