генерация уникального номера при регистрации пользователя

6 мар. 2015 г., 06:23:23
Просмотры: 13.7K
Голосов: 1

Я знаю, что в базе данных есть userID и username, но мне нужен форматированный уникальный номер для использования в реальном мире.

Например: "2014xxxx", где 2014 - год, а xxxx - случайно сгенерированные цифры при регистрации пользователя.

Возможно ли это?

Если возможно, какой самый простой и быстрый способ реализовать это?

1
Комментарии

Можно ли сделать этот номер на основе userID? Например, 2014xxxxuserID?

Krzysiek Dróżdż Krzysiek Dróżdż
6 мар. 2015 г. 08:33:56
Все ответы на вопрос 1
3

Это выполнит то, что вам нужно, и обе функции должны быть размещены в вашем файле functions.php.

Функция my_random_string() принимает аргументы, поэтому вы можете добавить данные до/после строки, а также изменить длину строки и символы, используемые для генерации строки.

/**
 * Генерация строки случайных символов
 *
 * @param array $args   Аргументы для использования в этой функции
 * @return string|null  Сгенерированная случайная строка (возвращается только если 'if($args['echo'] === false)')
 */
function my_random_string($args = array()){
    
    $defaults = array(  // Устанавливаем значения по умолчанию для использования в функции
        'characters'    => '0123456789',
        'length'        => 10,
        'before'        => '',
        'after'         => '',
        'echo'          => false
    );
    $args = wp_parse_args($args, $defaults);    // Объединяем переданные аргументы с значениями по умолчанию для формирования итогового массива '$args'
    
    if(absint($args['length']) < 1) // Проверяем, что длина валидна
        return;
    
    $characters_count = strlen($args['characters']);    // Определяем количество символов, из которых будет собираться случайная строка
    for($i = 0; $i <= $args['length']; $i++) :          // Генерируем случайный символ для каждого из '$args['length']'
    
        $start = mt_rand(0, $characters_count);
        $random_string.= substr($args['characters'], $start, 1);
        
    endfor;
    
    $random_string = $args['before'] . $random_string . $args['after']; // Добавляем строки before и after к случайной строке
    
    if($args['echo']) : // Проверяем, нужно ли выводить случайную строку или возвращать её
        echo $random_string;
    else :
        return $random_string;
    endif;
    
}

Здесь вы видите функцию my_on_user_register(), которая срабатывает при регистрации нового пользователя и добавляет запись в таблицу wp_usermeta с ключом random_number, но, конечно, вы можете изменить название этого ключа по своему усмотрению.

Я также рекомендую вам ознакомиться с Кодексом для действия user_register.

/**
 * При регистрации пользователя генерирует случайное число и добавляет его в таблицу usermeta
 *
 * @param required integer $user_id ID только что зарегистрированного пользователя
 */
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() для вывода случайного числа на странице профиля пользователя. Однако обратите внимание, что этот код не позволяет пользователю редактировать это число.

/**
 * Выводит дополнительные данные на странице профиля пользователя
 *
 * @param WP_User $user Объект свойств текущего отображаемого пользователя
 */
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('Дополнительные свойства'); ?></h3>
    
    <table class="form-table">
        <tr>
            <th><label for="address"><?php _e('Случайное число'); ?></label></th>
            <td><?php echo $random_number; ?></td>
        </tr>
    </table>
<?php
}
6 мар. 2015 г. 12:47:54
Комментарии

Спасибо за помощь! Я вижу случайное число в базе данных. Вот в чем вопрос: могу ли я взять первые четыре цифры как текущий год, а остальные оставить как случайное число? Также, как я могу вывести это число на странице профиля пользователя?

pakwai122 pakwai122
9 мар. 2015 г. 11:01:43

@pakc1202 - Вы хотите иметь возможность редактировать случайное число на странице профиля или просто просматривать его?

David Gard David Gard
9 мар. 2015 г. 11:25:16

@pakc1202 - Я обновил функцию обратного вызова my_on_user_register(), чтобы форматировать случайное число так, как вам нужно, и добавил примечание о выводе на профиль пользователя.

David Gard David Gard
9 мар. 2015 г. 11:45:12