Created
March 17, 2021 16:27
-
-
Save dparker1005/95c8ccf228ac4714d6c818985e4b06aa to your computer and use it in GitHub Desktop.
Only allow users to have each membership level once.
This file contains hidden or 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 | |
| // Copy from below here... | |
| /** | |
| * Only allow users to have each membership level once. | |
| */ | |
| function my_pmpro_registration_checks_one_time_levels( $okay ) { | |
| // Let's only check if things are OK. | |
| if ( ! $okay ) { | |
| return $okay; | |
| } | |
| global $pmpro_level; | |
| if ( in_array( intval( $pmpro_level->id ), my_pmpro_get_all_previous_membership_levels_for_user() ) ) { | |
| // User has previously had this level. | |
| pmpro_setMessage( 'You have already purchased this membership level. Please select a different one.', 'pmpro_error' ); | |
| $okay = false; | |
| } | |
| return $okay; | |
| } | |
| add_action( 'pmpro_registration_checks', 'my_pmpro_registration_checks_one_time_levels' ); | |
| /** | |
| * Get all membership levels the user belonged to. | |
| * | |
| * @param mixed $user_id, accepts integer or string. | |
| * @return array $member_previous_levels | |
| */ | |
| function my_pmpro_get_all_previous_membership_levels_for_user( $user_id = null ) { | |
| $member_previous_levels = array(); | |
| if ( empty( $user_id ) ) { | |
| $user_id = get_current_user_id(); | |
| } | |
| $user_id = intval( $user_id ); | |
| if ( is_user_logged_in() ) { | |
| global $wpdb; | |
| $sql_query = "SELECT DISTINCT membership_id FROM $wpdb->pmpro_memberships_users WHERE user_id = '$user_id'"; | |
| // Check if user previously belonged to a membership level | |
| $member_previous_levels = $wpdb->get_results( $sql_query, ARRAY_N ); // get levels | |
| $member_previous_levels = array_merge( ...$member_previous_levels ); // flatten multidimensional array | |
| } | |
| return $member_previous_levels; | |
| } | |
| add_filter( 'pmprommpu_gateway_supports_multiple_level_checkout', '__return_false' ); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment