Forked from greathmaster/pmpro-limit-members-per-level.php
Last active
April 16, 2024 09:29
-
-
Save strangerstudios/8721429685f3c9e729f21ea0a55be851 to your computer and use it in GitHub Desktop.
Limit the number of total sign ups for a given membership level
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
Set a maximum number of members allowed to register for a membership level. | |
Add this code to a plugin for PMPro Customizations. | |
Set the "Maximum" for a level on the Memberships > Membership Levels > Edit Level admin page. | |
*/ | |
function pmproml_pmpro_save_membership_level( $level_id) { | |
if( $level_id <= 0 ) { | |
return; | |
} | |
$limit = $_REQUEST['pmpro_member_limit']; | |
update_option('pmpro_limit_'.$level_id, $limit); | |
} | |
add_action( 'pmpro_save_membership_level', 'pmproml_pmpro_save_membership_level' ); | |
function pmproml_pmpro_membership_level_after_other_settings ( ) { | |
?> | |
<h3 class="topborder"><?php _e('Membership Limits', 'paid-memberships-pro');?></h3> | |
<table class="form-table"> | |
<tbody> | |
<tr> | |
<th scope="row" valign="top"><label for="pmpro_member_limit"><?php _e('Maximum', 'paid-memberships-pro'); ?></label></th> | |
<td> | |
<?php | |
if( isset( $_REQUEST['edit'] ) ) { | |
$edit = intval( $_REQUEST['edit'] ); | |
$limit = get_option( 'pmpro_limit_' . $edit ); | |
} else { | |
$limit = ""; | |
} | |
?> | |
<input type="text" name="pmpro_member_limit" id="pmpro_member_limit" size="6" value="<?php echo $limit; ?>" /> | |
<p class="description"><?php _e('Set the maximum number of members for this level.', 'paid-memberships-pro'); ?></p> | |
</td> | |
</tr> | |
</tbody> | |
</table> | |
<?php | |
} | |
add_action( 'pmpro_membership_level_after_other_settings', 'pmproml_pmpro_membership_level_after_other_settings' ); | |
function pmproml_pmpro_registration_checks( $value ) { | |
global $wpdb; | |
$level_id = intval( $_REQUEST['level'] ); | |
//get the maximum number of members allowed in this level | |
$limit = get_option( 'pmpro_limit_' . $level_id ); | |
//get the count of members in this level | |
$sql = "SELECT COUNT(*) | |
FROM {$wpdb->pmpro_memberships_users} | |
WHERE `status` LIKE 'active' AND `membership_id` = ". esc_sql($level_id); | |
$member_count = $wpdb->get_var($sql); | |
//compare the count of members to the maximum number of members allowed in this level | |
if($member_count >= $limit) { | |
global $pmpro_msg, $pmpro_msgt; | |
$pmpro_msg = __('Membership limit has been reached for this level', 'paid-memberships-pro'); | |
$pmpro_msgt = "pmpro_error"; | |
$value = false; | |
} | |
return $value; | |
} | |
add_filter( 'pmpro_registration_checks', 'pmproml_pmpro_registration_checks' ); |
Can we disable the Free membership plan "select" button from already purchased users?
Is it possible to make the below into a shortcode so I can add it to a personalised levels page I have created??
I open pmpro-customizations.php and add this code but, after I set the limit in Memberships > Membership Levels > Edit Level admin page doesn't show “2/10 spots available” on page.
I added also
/* * This will show '0/X spots available.' on membership level description if a limit is set from (https://www.paidmembershipspro.com/limit-number-members-membership-level/) * Add this code to your PMPro Customizations Plugin - https://www.paidmembershipspro.com/create-a-plugin-for-pmpro-customizations/ * For help, post a support thread on www.paidmembershipspro.com */ function pmpro_show_spots_available( $description, $level ) { global $wpdb; $level_id = intval( $level->id ); //get the maximum number of members allowed in this level $limit = get_option( 'pmpro_limit_' . $level_id ); // if the limit is not set, just return the default description for that level. if( empty( $limit ) ){ return $description; } //get the count of members in this level $sql = "SELECT COUNT(*) FROM {$wpdb->pmpro_memberships_users} WHERE `status` LIKE 'active' AND `membership_id` = ". esc_sql($level_id); $member_count = $wpdb->get_var($sql); $description .= $member_count . '/' . $limit; $description .= ' spots available.'; return $description; } add_filter( 'pmpro_level_description', 'pmpro_show_spots_available', 10, 2 );
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I have added the above code, set the limit to one on a certain membership level and then did a test purchase. However, after doing so (ie this membership should no longer be available), the front end is still showing the signup form - can someone help me understand how to remove the signup form on the front end when memberships are no longer available?