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 ipokkel/8ce665a9323402d6fef65085d9acda4e to your computer and use it in GitHub Desktop.
Save ipokkel/8ce665a9323402d6fef65085d9acda4e to your computer and use it in GitHub Desktop.
PMPro Lock Membership Levels - Allow members to check out for their own membership level for renewal purposes
<?php
/**
* This recipe allows members to renew a locked membership level
* if the level was locked with PMPro Lock Membership Levels Add On.
*
* This recipe expects and requires the Membership Locked page set up
* and assigned under Memberships > Settings > Page settings.
* @link https://www.paidmembershipspro.com/add-ons/pmpro-lock-membership-level/#install
*
* You can add this recipe to your site by creating a custom plugin
* or using the Code Snippets plugin available for free in the WordPress repository.
* Read this companion article for step-by-step directions on either method.
* https://www.paidmembershipspro.com/create-a-plugin-for-pmpro-customizations/
*/
function my_init() {
global $pmpro_pages;
// Check if Lock Membership is active and required Membership Locked page is set.
if ( function_exists( 'pmprolml_template_redirect' ) && ! empty( $pmpro_pages['membership_locked'] ) && pmpro_hasMembershipLevel() ) {
remove_action( 'template_redirect', 'pmprolml_template_redirect' );
add_action( 'template_redirect', 'my_pmprolml_template_redirect' );
}
}
add_action( 'init', 'my_init' );
function my_pmprolml_template_redirect() {
global $pmpro_pages, $current_user, $pmpro_level;
if ( empty( $pmpro_pages ) || empty( $pmpro_pages['membership_locked'] ) ) {
return;
}
$user_lock_options = pmprolml_getUserOptions( $current_user->ID );
//Redirect away from the membership locked page if user isn't locked.
if ( is_user_logged_in() && is_page( $pmpro_pages['membership_locked'] ) && ( empty( $user_lock_options ) || empty( $user_lock_options['locked'] ) ) ) {
if ( pmpro_hasMembershipLevel() ) {
wp_redirect( pmpro_url( 'account' ) );
exit;
} else {
wp_redirect( home_url() );
exit;
}
}
//Redirect to the membership locked page if user is locked.
$locked_pages = array(
$pmpro_pages['levels'],
$pmpro_pages['cancel'],
);
if ( is_user_logged_in() && is_page( $locked_pages ) ) {
if ( ! empty( $user_lock_options ) && ! empty( $user_lock_options['locked'] ) ) {
if ( ! empty( $pmpro_pages['membership_locked'] ) ) {
wp_redirect( pmpro_url( 'membership_locked' ) );
exit;
} else {
wp_redirect( home_url() );
exit;
}
}
}
if ( is_user_logged_in() && is_page( $pmpro_pages['checkout'] ) ) {
$level_id = $_REQUEST['level'];
if ( ! empty( $level_id ) && ! pmpro_hasMembershipLevel( $level_id ) ) {
wp_redirect( pmpro_url( 'membership_locked' ) );
exit;
}
}
}
@ipokkel
Copy link
Author

ipokkel commented Dec 14, 2020

@ipokkel
Copy link
Author

ipokkel commented Sep 29, 2021

To allow renewal after expiration of locked membership level see - https://gist.github.com/ipokkel/55034deaff6c4bcb90276288f161f0dc

@MaryOJob
Copy link

Allow members cancel but not change their level: https://gist.github.com/MaryOJob/c12c6d3fd9b6d10c4fffe39212277a83

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