web-dev-qa-db-ja.com

ユーザー登録時に一意の番号を生成する

データベースにuserIDusernameがあることは知っていますが、物理的に使用するためのフォーマットされた一意の番号が欲しいのです。

例: "2014xxxx" 201414:year、xxxx:ユーザー登録時にランダムに生成されます。

出来ますか?

可能であれば、その最も簡単な方法と最速の方法は何ですか?

1
pakc1202

これはあなたが望むことをするでしょう、そして両方の関数はあなたの fucntions.php ファイルの中に置かれるべきです。

my_random_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;

}

ここにはmy_on_user_register()関数があります。これは新しいユーザーが生成され、wp_usermetaキーに対してrandom_numberテーブルにエントリを追加するたびにフックされますが、明らかに必要に応じてこのキーの名前を変更できます。

user_registerアクションの Codexを見てみることをお勧めします

/**
 * 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);

}

編集する

あなたのコメント通り、コールバック関数my_on_user_register()は現在の年で始まりその後ランダムな6文字の文字列(数字のみ)で終わる数を生成します。

下記のmy_extra_user_profile_fields()コールバック関数を使って乱数をユーザーのプロフィールページに出力することもできます。ただし、このコードではユーザーはその番号を編集できません。

/**
 * 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
}
3
David Gard