Создание уникального ID для пользователя
Мне нужно создать сайт с членством, и я хочу, чтобы каждый зарегистрированный пользователь получал автоматический ID номер.
Например:
Пользователь 2 - имеет код pay-102
Пользователь 3 - имеет код pay-103
Я поискал на форуме и нашел это, это почти то, что мне нужно - Какой самый быстрый способ сгенерировать уникальный ID номер при регистрации пользователя
У меня есть код, который добавит поле в панель пользователя в админке:
function fb_add_custom_user_profile_fields( $user ) {
?>
<h3><?php _e('Дополнительная информация профиля', 'themename'); ?></h3>
<table class="form-table">
<tr>
<th>
<label for="memnumber"><?php _e('Номер участника', 'themename'); ?>
</label></th>
<td>
<input type="text" name="memnumber" id="memnumber" value="<?php echo esc_attr( get_the_author_meta( 'memnumber', $user->ID ) ); ?>" class="regular-text" /><br />
<span class="description"><?php _e('Пожалуйста, введите ваш номер участника.', 'themename'); ?></span>
</td>
</tr>
</table>
<?php }
function fb_save_custom_user_profile_fields( $user_id ) {
if ( !current_user_can( 'edit_user', $user_id ) )
return FALSE;
update_usermeta( $user_id, 'memnumber', $_POST['memnumber'] );
}
add_action( 'show_user_profile', 'fb_add_custom_user_profile_fields' );
add_action( 'edit_user_profile', 'fb_add_custom_user_profile_fields' );
add_action( 'personal_options_update', 'fb_save_custom_user_profile_fields' );
add_action( 'edit_user_profile_update', 'fb_save_custom_user_profile_fields' );
Как мне заполнить это поле автоматически генерируемым инкрементным номером?
Вот код, который считывает наибольший номер из таблицы метаданных пользователя и затем добавляет +1 к этому номеру. Этот номер сохраняется для каждого нового зарегистрированного пользователя. Код выполняется через хук действия "user_register"
.
add_action( 'user_register', 'assignuserid');
function assignuserid($user_id) {
global $wpdb;
$latestid=$wpdb->get_var("SELECT meta_value from $wpdb->usermeta where meta_key='memnumber' order by meta_value DESC limit 1;");
update_user_meta( $user_id, 'memnumber', $latestid+1 );
}
Примечание: Если префикс "pay-" фиксированный, он не должен быть частью кода, сохраняющего значение, а только частью вывода. Например:
echo "Ваш ID пользователя: PAY-"+$userid.

Вот лучшее решение:
add_filter("user_register", "get_unique");
function get_unique($user_id){
$prefix = "PAY-";
do {
$unique = mt_rand();
$unique = substr($unique, 0, 3);
$unique = $prefix . $unique;
} while (!check_unique($unique));
return update_usermeta( $user_id, 'memnumber', $unique );//$unique;
}
function check_unique($unique) {
global $wpdb;
$result = $wpdb->get_var("SELECT meta_value from $wpdb->usermeta where meta_key='memnumber' AND meta_value = '$unique'");
if(empty($result))
return true;
return false;
}
