Crear ID único para usuario
Necesito crear un sitio de membresía, pero debo asignar automáticamente un número de ID a cada usuario que se registre.
Por ejemplo:
Usuario 2 - tiene un código - pay-102
Usuario 3 - tiene un código - pay-103
Busqué en el foro y encontré esto, que es básicamente lo que estoy preguntando - ¿Cuál es la forma más rápida de generar un número de ID único al registrar un usuario?
Tengo un fragmento de código que lo agregará al panel de usuario en el área de administración:
function fb_add_custom_user_profile_fields( $user ) {
?>
<h3><?php _e('Información de Perfil Adicional', 'themename'); ?></h3>
<table class="form-table">
<tr>
<th>
<label for="memnumber"><?php _e('Número de membresía', '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('Por favor ingresa tu número de membresía.', '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' );
¿Cómo puedo rellenar ese campo con un número incremental que se asigne automáticamente?
Aquí hay un código que lee el número más alto de la tabla de metadatos de usuario y luego le suma +1. Este número se guarda para cada nuevo usuario registrado. El código se activa mediante el hook de acción "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 );
}
Nota: Si el "pay-" es fijo, no necesita ser parte del código que almacena el valor, solo parte de la salida. Por ejemplo:
echo "Tu ID de usuario: PAY-"+$userid.

Aquí hay una solución mejor:
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;
}
