Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save davidmutero/6a05d8a3922ecdd9714ef9e476002b20 to your computer and use it in GitHub Desktop.

Select an option

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.
<?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