1

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?

  • Can this number be based on userID? For example 2014xxxxuserID? – Krzysiek Dróżdż Mar 6 '15 at 6:33
3

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
}
  • Thank you for your help! I can see the random number in database. Here is the thing, can I take the first four digit into current year and the rest into random number?Also, how can I output the number in user profile page? – pakwai122 Mar 9 '15 at 9:01
  • @pakc1202 - Do you want to be able edit the random number on the profile page, or just view it? – David Gard Mar 9 '15 at 9:25
  • @pakc1202 - I've updated the my_on_user_register() callback to format the random number as you require, and I've added a note about outputting to the Users profile. – David Gard Mar 9 '15 at 9:45

protected by Community Oct 29 '17 at 22:00

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.