From ebe4415fcfa965e1beb371e5a748477753948b9d Mon Sep 17 00:00:00 2001 From: David Wanjuki <123358258+dwanjuki@users.noreply.github.com> Date: Tue, 25 Mar 2025 14:33:52 +0300 Subject: [PATCH 1/2] Create stop-members-from-downgrading-level.php This snippet can be used to prevent members from downgrading their levels on sites with hierarchical levels. Originally a "make your day" snippet for a customer. Not MMPU-compatible. --- .../stop-members-from-downgrading-level.php | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 checkout/stop-members-from-downgrading-level.php diff --git a/checkout/stop-members-from-downgrading-level.php b/checkout/stop-members-from-downgrading-level.php new file mode 100644 index 0000000..31f0abd --- /dev/null +++ b/checkout/stop-members-from-downgrading-level.php @@ -0,0 +1,63 @@ +id; + + // Get level for checkout. + $checkout_level = pmpro_getLevelAtCheckout(); + $checkout_level_id = $checkout_level->id; + + // bail if renewal + if( $checkout_level_id === $member_level_id ) { + return $okay; + } + + // Specify the level hierarchy, lowest to highest + $level_order = array( 1, 2, 3, 4, 5 ); + + // figure out where the levels rank, bail if not in level order + $checkout_level_rank = array_search( $checkout_level_id, $level_order ); + $member_level_rank = array_search( $member_level_id, $level_order ); + if ( false === $checkout_level_rank || false === $member_level_rank ) { + return $okay; + } + + // are they checking out for a lower level? + if( $member_level_rank > $checkout_level_rank ) { + $okay = false; + // show an error message on checkout page + pmpro_setMessage( 'You are not allowed to checkout for this membership level.', 'pmpro_error' ); + } + + return $okay; +} +add_filter( 'pmpro_registration_checks', 'my_pmpro_tiered_levels_prevent_downgrade' ); From 53d65b79cb31ad9d8925c4dc27db3c7aebe59e03 Mon Sep 17 00:00:00 2001 From: Andrew Lima Date: Fri, 19 Sep 2025 11:54:35 +0200 Subject: [PATCH 2/2] Minor WPCS and login check. --- checkout/stop-members-from-downgrading-level.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/checkout/stop-members-from-downgrading-level.php b/checkout/stop-members-from-downgrading-level.php index 31f0abd..bb8e923 100644 --- a/checkout/stop-members-from-downgrading-level.php +++ b/checkout/stop-members-from-downgrading-level.php @@ -1,26 +1,30 @@ id; // bail if renewal - if( $checkout_level_id === $member_level_id ) { + if ( $checkout_level_id === $member_level_id ) { return $okay; } @@ -52,7 +56,7 @@ function my_pmpro_tiered_levels_prevent_downgrade( $okay ) { } // are they checking out for a lower level? - if( $member_level_rank > $checkout_level_rank ) { + if ( $member_level_rank > $checkout_level_rank ) { $okay = false; // show an error message on checkout page pmpro_setMessage( 'You are not allowed to checkout for this membership level.', 'pmpro_error' );