Forked from michaelbeil/sequential-numeric-member-number.php
Last active
October 30, 2024 14:11
-
-
Save davidmutero/6a05d8a3922ecdd9714ef9e476002b20 to your computer and use it in GitHub Desktop.
Generates and displays sequential numbers for members of a designated level on account, profile, members list, card, and CSV export.
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 | |
| /** | |
| * Sequential Membership Numbers for designed membership level e.g Membership Level 2 Only | |
| * | |
| * This forked version generates sequential membership numbers only for users registered at Membership Level 2. | |
| * Member numbers are automatically increased from the starting value set for $starting_member_number | |
| * after each new Level 2 member registration. | |
| * | |
| * Displayed on user account, edit profile, members list pages, membership card, and included in members list CSV export. | |
| * | |
| * Requirements: | |
| * Membership Card Add On - https://www.paidmembershipspro.com/add-ons/pmpro-membership-card/ | |
| * Custom Membership Card template - https://gist.github.com/ipokkel/c3a93a5718aa5646b80adff814ed76d4 | |
| */ | |
| /** | |
| * Generate member_number only for users with Membership Level 2 during registration. | |
| * | |
| * Existing members in the system will not receive a membership number unless they are at Level 2. | |
| */ | |
| function generate_member_number( $user_id ) { | |
| // Set the starting membership number here | |
| $starting_member_number = 3418; | |
| // Check if the user has Membership Level 2 | |
| if ( pmpro_hasMembershipLevel( 2, $user_id ) ) { | |
| // Retrieve current member number from options | |
| $current_member_number = get_option( 'pmpro_seq_current_member_num' ); | |
| // Initialize current member number if it doesn't exist | |
| if ( empty( $current_member_number ) ) { | |
| $current_member_number = $starting_member_number; | |
| } | |
| // Update user metadata and increase the member number for the next user | |
| update_user_meta( $user_id, 'member_number', $current_member_number ); | |
| update_option( 'pmpro_seq_current_member_num', $current_member_number + 1 ); | |
| return $current_member_number; | |
| } | |
| // Return null if user is not at Membership Level 2 | |
| return null; | |
| } | |
| add_action( 'user_register', 'generate_member_number' ); | |
| /** | |
| * Show member number on the membership account page, only for users at Membership Level 2. | |
| */ | |
| function pmpromn_pmpro_account_bullets_bottom() { | |
| if ( is_user_logged_in() ) { | |
| global $current_user; | |
| // Only display for Membership Level 2 | |
| if ( pmpro_hasMembershipLevel( 2, $current_user->ID ) ) { | |
| // Retrieve member number | |
| $member_number = get_user_meta( $current_user->ID, 'member_number', true ); | |
| // Generate member number on-the-fly if missing | |
| if ( empty( $member_number ) ) { | |
| $member_number = generate_member_number( $current_user->ID ); | |
| } | |
| // Display member number if available | |
| if ( ! empty( $member_number ) ) { | |
| ?> | |
| <li><strong><?php _e( 'Member Number', 'paid-memberships-pro' ); ?>:</strong> <?php echo $member_number; ?></li> | |
| <?php | |
| } | |
| } | |
| } | |
| } | |
| add_action( 'pmpro_account_bullets_bottom', 'pmpromn_pmpro_account_bullets_bottom' ); | |
| add_action( 'pmpro_invoice_bullets_bottom', 'pmpromn_pmpro_account_bullets_bottom' ); | |
| /** | |
| * Add member number to confirmation emails for Level 2 members only. | |
| */ | |
| add_filter( 'pmpro_email_filter', 'pmpromn_pmpro_email_filter', 30, 2 ); | |
| function pmpromn_pmpro_email_filter( $email ) { | |
| // Check if this is a checkout email | |
| if ( strpos( $email->template, 'checkout' ) !== false ) { | |
| if ( ! empty( $email->data ) && ! empty( $email->data['user_login'] ) ) { | |
| // Retrieve user by login | |
| $user = get_user_by( 'login', $email->data['user_login'] ); | |
| // Only add member number if user is at Membership Level 2 | |
| if ( $user && pmpro_hasMembershipLevel( 2, $user->ID ) ) { | |
| $member_number = get_user_meta( $user->ID, 'member_number', true ); | |
| if ( ! empty( $member_number ) ) { | |
| $email->body = str_replace( '<p>Membership Level', '<p>Member Number:' . $member_number . '</p><p>Membership Level', $email->body ); | |
| } | |
| } | |
| } | |
| } | |
| return $email; | |
| } | |
| /** | |
| * Include member number in Members List and CSV export only for Level 2 members. | |
| */ | |
| add_filter( 'pmpro_members_list_csv_extra_columns', 'my_pmpro_members_list_csv_extra_columns', 10 ); | |
| function my_pmpro_members_list_csv_extra_columns( $columns ) { | |
| $columns['member_number'] = 'my_extra_column_member_number'; | |
| return $columns; | |
| } | |
| function my_extra_column_member_number( $user ) { | |
| // Only add member number for Level 2 members | |
| if ( pmpro_hasMembershipLevel( 2, $user->ID ) ) { | |
| if ( empty( $user->metavalues->member_number ) ) { | |
| generate_member_number( $user->ID ); | |
| } | |
| return $user->metavalues->member_number; | |
| } | |
| // Return empty if not Level 2 | |
| return ''; | |
| } | |
| /** | |
| * Display member number in Members List for Level 2 members only. | |
| */ | |
| add_action( 'pmpro_memberslist_extra_cols_header', 'my_pmpro_memberslist_extra_cols_header' ); | |
| function my_pmpro_memberslist_extra_cols_header() { | |
| ?> | |
| <th><?php _e( 'Member Number', 'paid-memberships-pro' ); ?></th> | |
| <?php | |
| } | |
| add_action( 'pmpro_memberslist_extra_cols_body', 'my_pmpro_memberslist_extra_cols_body' ); | |
| function my_pmpro_memberslist_extra_cols_body( $theuser ) { | |
| // Only show member number if user is at Level 2 | |
| if ( pmpro_hasMembershipLevel( 2, $theuser->ID ) ) { | |
| if ( empty( $theuser->member_number ) ) { | |
| generate_member_number( $theuser->ID ); | |
| } | |
| ?> | |
| <td><?php echo $theuser->member_number; ?></td> | |
| <?php | |
| } else { | |
| echo '<td></td>'; // Leave blank for non-Level 2 members | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment