Crear ID único para usuario

20 sept 2012, 13:49:02
Vistas: 17K
Votos: 0

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?

4
Comentarios

Hola Andy... No estoy seguro de por qué necesitas crear un ID único adicional para cada usuario. ¿Cada usuario registrado en WP ya tiene un ID de usuario único? Supongo que los usuarios no deberían poder editar su propio ID de usuario, ya que eso podría crear conflictos, ¿verdad?

Lars Koudal Lars Koudal
20 sept 2012 13:52:20

También debería preguntar, si ese campo se llena desde la base de datos wp_users, y el 'admin' actualiza el número a uno diferente, ¿eso actualizaría el campo en la base de datos?

Andy Andy
20 sept 2012 13:53:19

Hola Lars, el cliente ya tiene un sistema de numeración para los miembros, ha preguntado si podría continuar con el mismo formato (ojalá, solo cambiando el número) - Personalmente no le veo el sentido ya que es una solicitud extraña, pero me gustaría saber si se puede hacer, si causará algún problema, etc...

Andy Andy
20 sept 2012 13:55:40

Hola Andy. He añadido una respuesta con el código que necesitas. Si el cliente no tiene una razón particular para la solicitud, yo no implementaría el código. Pero eso es cosa mía :-)

Lars Koudal Lars Koudal
20 sept 2012 15:03:15
Todas las respuestas a la pregunta 2
0

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.
20 sept 2012 14:58:26
1

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;
}
27 sept 2014 04:28:57
Comentarios

Por favor, agrega una explicación a tu respuesta: ¿por qué eso podría resolver el problema?

fuxia fuxia
27 sept 2014 04:39:39