I know there are userID, username in the database, but I want a formatted and unique number for physical world use.
For example: “2014xxxx” 201414:year,xxxx:generate randomly when registering a user.
Is it possible?
If possible, what is the simplest way and fastest way to do so?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
This will do what you want, and both functions should be placed within your fucntions.php file.
The my_random_string() function accepts arguments, so you can add data before/after the string, as well as change the length of the string and the characters that are used to generate the string.
/**
* Generate a string of random characters
*
* @param array $args The arguments to use for this function
* @return string|null The random string generated by this function (only 'if($args['echo'] === false)')
*/
function my_random_string($args = array()){
$defaults = array( // Set some defaults for the function to use
'characters' => '0123456789',
'length' => 10,
'before' => '',
'after' => '',
'echo' => false
);
$args = wp_parse_args($args, $defaults); // Parse the args passed by the user with the defualts to generate a final '$args' array
if(absint($args['length']) < 1) // Ensure that the length is valid
return;
$characters_count = strlen($args['characters']); // Check how many characters the random string is to be assembled from
for($i = 0; $i <= $args['length']; $i++) : // Generate a random character for each of '$args['length']'
$start = mt_rand(0, $characters_count);
$random_string.= substr($args['characters'], $start, 1);
endfor;
$random_string = $args['before'] . $random_string . $args['after']; // Add the before and after strings to the random string
if($args['echo']) : // Check if the random string shoule be output or returned
echo $random_string;
else :
return $random_string;
endif;
}
Here you have the my_on_user_register() function, which is hooked whenever a new user is generated and adds an entry into the wp_usermeta table against the random_number key, but obviously you can change the name of this key as required.
I’d also recommend that you take a look at the Codex for the user_register action.
/**
* Upon user registration, generate a random number and add this to the usermeta table
*
* @param required integer $user_id The ID of the newly registerd user
*/
add_action('user_register', 'my_on_user_register');
function my_on_user_register($user_id){
$args = array(
'length' => 6,
'before' => date("Y")
);
$random_number = my_random_string($args);
update_user_meta($user_id, 'random_number', $random_number);
}
Edit
As per your comment, the callback function my_on_user_register() will now generate a number that starts with the current year and then ends with a random 6 character string (of only numbers).
You can also use the below my_extra_user_profile_fields() callback function to output the random number on the users profile page. Note however that this code does not allow the user to edit that number.
/**
* Output additional data to the users profile page
*
* @param WP_User $user Object properties for the current user that is being displayed
*/
add_action('show_user_profile', 'my_extra_user_profile_fields');
add_action('edit_user_profile', 'my_extra_user_profile_fields');
function my_extra_user_profile_fields($user){
$random_number = get_the_author_meta('random_number', $user->ID);
?>
<h3><?php _e('Custom Properties'); ?></h3>
<table class="form-table">
<tr>
<th><label for="address"><?php _e('Random Number'); ?></label></th>
<td><?php echo $random_number; ?></td>
</tr>
</table>
<?php
}
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0