Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save ipokkel/34b021287ba5442d386387a1a05f92d8 to your computer and use it in GitHub Desktop.

Select an option

Save ipokkel/34b021287ba5442d386387a1a05f92d8 to your computer and use it in GitHub Desktop.
Generate a "Member Number" for WordPress users and show it on the PMPro account page.
<?php
/*
Member Numbers
* Change the unique_alphanumeric_member_number function if your member number needs to be in a certain format.
* Member numbers are generated when users are registered or when the membership account page is accessed for the first time.
*/
// randomize alphabetical string
function generate_random_alphabetic_string( $additional_seeds = 0 ) {
$seed = 'abcdefghijklmnopqrstuvwxyz';
for ( $i = 0; $i < $additional_seeds; $i++ ) {
$seed = $seed . $seed;
}
return $seed;
}
// randomized alphanumeric string that accepts salting
function generate_random_alphanumeric_string( $salt = '' ) {
return md5( AUTH_KEY . my_time_now_integer() . $salt . SECURE_AUTH_KEY );
}
// return time integer
function my_time_now_integer() {
// for performance use hrtime if available.
if ( function_exists( 'hrtime' ) ) {
return hrtime( true );
} else {
return intval( microtime( true ) );
}
}
function unique_alphanumeric_member_number( $user_id ) {
$member_number = get_user_meta( $user_id, 'member_number', true );
//if no member number, create one
if ( empty( $member_number ) ) {
$member_number_length = 10; // set length of member number, minimum 8.
global $wpdb;
//this code generates a string 10 characters long of numbers and letters
while ( empty( $member_number ) ) {
if ( $member_number_length < 8 ) {
$member_number_length = 8;
}
$alphabetic_string = substr( generate_random_alphabetic_string( 3 ), 0, ( 6 - strlen( $user_id ) ) );
$alphabetic_string = str_shuffle( $alphabetic_string );
$scramble = substr( generate_random_alphanumeric_string( $user_id ), 0, ( $member_number_length - strlen( $alphabetic_string ) - strlen( $user_id ) ) );
$member_number = $scramble . $alphabetic_string . $user_id;
$check = $wpdb->get_var( "SELECT meta_value FROM $wpdb->usermeta WHERE meta_value = '" . esc_sql( $member_number ) . "' LIMIT 1" );
if ( $check || is_numeric( $member_number ) ) {
$member_number = null;
}
}
//save to user meta
update_user_meta( $user_id, 'member_number', $member_number );
// return $member_number;
}
return $member_number;
}
add_action( 'user_register', 'unique_alphanumeric_member_number' );
//Show it on the membership account page.
function pmpromn_pmpro_account_bullets_bottom() {
if ( is_user_logged_in() ) {
global $current_user;
//get member number
$member_number = get_user_meta( $current_user->ID, 'member_number', true );
//if no number, generate one
if ( empty( $member_number ) ) {
$member_number = unique_alphanumeric_member_number( $current_user->ID );
}
//show it
if ( ! empty( $member_number ) ) {
?>
<li><strong><?php _e( 'Member Number', 'pmpro' ); ?>:</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' );
//show member_number in confirmation emails
function pmpromn_pmpro_email_filter( $email ) {
global $wpdb;
//only update admin confirmation emails
if ( strpos( $email->template, 'checkout' ) !== false ) {
if ( ! empty( $email->data ) && ! empty( $email->data['user_login'] ) ) {
$user = get_user_by( 'login', $email->data['user_login'] );
if ( ! empty( $user ) && ! empty( $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;
}
add_filter( 'pmpro_email_filter', 'pmpromn_pmpro_email_filter', 30, 2 );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment