Skip to content

Instantly share code, notes, and snippets.

@JarrydLong
Last active June 25, 2020 10:57
Show Gist options
  • Save JarrydLong/66a836ee98fc62cf25ef5a8d00d98df6 to your computer and use it in GitHub Desktop.
Save JarrydLong/66a836ee98fc62cf25ef5a8d00d98df6 to your computer and use it in GitHub Desktop.
<?php
/**
* This recipe is based off of the below guide but generaes a member number based on the member's level
* https://www.paidmembershipspro.com/generate-a-unique-member-number-for-display-on-membership-account-confirmation-email-and-more/
*
* You can add this recipe to your site by creating a custom plugin
* or using the Code Snippets plugin available for free in the WordPress repository.
* Read this companion article for step-by-step directions on either method.
* https://www.paidmembershipspro.com/create-a-plugin-for-pmpro-customizations/
*/
//Generate a member number based on level + year
function mypmpro_generate_member_number_levels( $user_id ){
$member_number = get_user_meta($user_id, "member_number", true);
//if no member number, create one
if( empty( $member_number ) ){
global $wpdb;
//this code generates a string 10 characters long of numbers and letters
while( empty( $member_number ) ){
$scramble = $user_id;
if( !empty( $_REQUEST['level'] ) ){
if( $_REQUEST['level'] == 1 ){
$level_code = 'A';
} else if( $_REQUEST['level'] == 2 ){
$level_code = 'B';
} else if( $_REQUEST['level'] == 3 ){
$level_code = 'C';
} else {
$level_code = 'X';
}
//We're going to use the format of DATE-CODE-RANDOM as the member number
$member_number = date('Y').'-'.$level_code.'-'.substr( $scramble, 0, 5 );
$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;
}
}
add_action('user_register', 'mypmpro_generate_member_number_levels', 99);
//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 = mypmpro_generate_member_number_levels($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