Skip to content

Instantly share code, notes, and snippets.

@ronalfy
Created October 8, 2020 15:12
Show Gist options
  • Save ronalfy/d9c68972087cf8ec83584de8227b7835 to your computer and use it in GitHub Desktop.
Save ronalfy/d9c68972087cf8ec83584de8227b7835 to your computer and use it in GitHub Desktop.
PMPro - Show Membership Number Only for Certain Level
<?php
/**
* Generates a membership number for each user. If they are not in a
* specified level, the membershpip number does not show.
*
* 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/
*/
define( 'PMPRO_LEVELS_ACCESS_MEMBER_NUMBER', array( 10 ) ); // Please modify me.
function generate_member_number( $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 = md5( AUTH_KEY . current_time( 'timestamp' ) . $user_id . SECURE_AUTH_KEY );
$member_number = substr( $scramble, 0, 10 );
$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', 'generate_member_number' );
// Show it on the membership account page.
function pmpromn_pmpro_account_bullets_bottom() {
if ( is_user_logged_in() ) {
global $current_user;
if ( ! pmpro_hasMembershipLevel( PMPRO_LEVELS_ACCESS_MEMBER_NUMBER, $current_user->ID ) ) {
return;
}
// 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 = generate_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 );
function pmpromn_pmpro_custom_membership_number( $pmpro_membership_card_user, $print_sizes, $qr_code, $qr_data ) {
if ( ! is_user_logged_in() ) {
return;
}
global $current_user;
$user_id = $current_user->ID;
if ( ! pmpro_hasMembershipLevel( PMPRO_LEVELS_ACCESS_MEMBER_NUMBER, $current_user->ID ) ) {
return;
}
// 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 = generate_member_number( $current_user->ID );
}
// show it
if ( ! empty( $member_number ) ) {
?>
<p><strong><?php _e( 'Member Number', 'pmpro' ); ?>:</strong> <?php echo esc_html( $member_number ); ?></p>
<?php
}
}
add_action( 'pmpro_membership_card_after_card', 'pmpromn_pmpro_custom_membership_number', 10, 4 );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment