Skip to content

Instantly share code, notes, and snippets.

@ipokkel
Last active August 29, 2024 09:47
Show Gist options
  • Save ipokkel/7e71567095f4d88202067d0c967cc49f to your computer and use it in GitHub Desktop.
Save ipokkel/7e71567095f4d88202067d0c967cc49f to your computer and use it in GitHub Desktop.
Stop users with an active membership from checking out for a membership.
<?php
/**
* Block active members from checking out but allow renewal if membership is expiring soon.
*
* 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/
*/
// Remove change link on account page.
function my_pmpro_account_links_remove_change( $pmpro_member_action_links ) {
unset( $pmpro_member_action_links['change'] );
return $pmpro_member_action_links;
}
add_filter( 'pmpro_member_action_links', 'my_pmpro_account_links_remove_change' );
// Restrict and stop checkout for active members.
function my_pmpro_block_existing_members_from_checkout( $okay ) {
global $current_user, $pmpro_level;
if ( ! $okay ) {
return $okay;
}
if ( ! empty( $current_user->ID ) && pmpro_hasMembershipLevel() && ! pmpro_isLevelExpiringSoon( $pmpro_level->id ) ) {
// disable checkout.
pmpro_setMessage( 'You are already a member. Please cancel your active membership first.', 'pmpro_error' );
return false;
}
return $okay;
}
add_filter( 'pmpro_registration_checks', 'my_pmpro_block_existing_members_from_checkout' );
// Warn existing members on checkout.
function my_pmpro_warn_existing_members_on_checkout() {
global $current_user, $pmpro_level;
// bail if user is not logged in or do not have a membership level
if ( empty( $current_user->ID ) || ! pmpro_hasMembershipLevel() ) {
return;
}
if ( ! empty( $current_user->ID ) && pmpro_hasMembershipLevel() && ! pmpro_isLevelExpiringSoon( $pmpro_level->id ) ) {
pmpro_setMessage( 'You are already a member. Please cancel your active membership first.', 'pmpro_error' );
}
}
add_action( 'pmpro_checkout_after_parameters_set', 'my_pmpro_block_existing_members_from_checkout' );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment