Creare un ID univoco per l'utente

20 set 2012, 13:49:02
Visualizzazioni: 17K
Voti: 0

Devo creare un sito con iscrizione a pagamento, ma ho bisogno di assegnare automaticamente un numero ID a ogni utente che si registra.

Per esempio:

  • Utente 2 - ha un codice - pay-102

  • Utente 3 - ha un codice - pay-103

Ho cercato nel forum e ho trovato questo, che è più o meno quello che chiedo - Qual è il modo più veloce per generare un ID univoco durante la registrazione di un utente

Ho un pezzo di codice che aggiungerà il campo al pannello utente nell'area admin:

// Aggiunge campi personalizzati al profilo utente
function fb_add_custom_user_profile_fields( $user ) {
?>
<h3><?php _e('Informazioni Extra del Profilo', 'themename'); ?></h3>
<table class="form-table">
    <tr>
        <th>
            <label for="memnumber"><?php _e('Numero di membro', '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('Inserisci il tuo numero di iscrizione.', 'themename'); ?></span>
        </td>
    </tr>
</table>
<?php }

// Salva i campi personalizzati del profilo utente
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'] );
}

// Aggiunge le azioni per i profili utente
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' );

Come posso popolare quel campo con un numero incrementale che viene assegnato automaticamente?

4
Commenti

Ciao Andy.. Non sono sicuro del perché tu debba creare un ID unico aggiuntivo per ogni utente. Ogni utente registrato in WP ha già un ID utente univoco? Presumo che gli utenti non dovrebbero poter modificare il proprio ID utente, poiché ciò potrebbe creare conflitti?

Lars Koudal Lars Koudal
20 set 2012 13:52:20

Dovrei anche chiedere, se quel campo è popolato dal database wp_users, e l'admin aggiorna il numero con uno diverso, questo aggiornerebbe il campo nel database?

Andy Andy
20 set 2012 13:53:19

Ciao Lars, Il cliente ha già un sistema di numerazione per i membri, ha chiesto se potesse continuare con lo stesso formato (si spera, cambiando solo il numero) - Personalmente non vedo il motivo poiché è una richiesta strana, ma vorrei sapere se può essere fatto, se causerà problemi ecc ecc...

Andy Andy
20 set 2012 13:55:40

Ciao Andy. Ho aggiunto una risposta con il codice di cui hai bisogno. Se il cliente non ha una ragione particolare per la richiesta, io non implementerei il codice. Ma questa è la mia opinione :-)

Lars Koudal Lars Koudal
20 set 2012 15:03:15
Tutte le risposte alla domanda 2
0

Ecco del codice che legge il numero più alto dalla tabella delle meta informazioni degli utenti e poi aggiunge +1 a quel numero. Questo numero viene salvato per ogni nuovo utente registrato. Il codice viene attivato tramite l'hook "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: Se il prefisso "PAY-" è fisso, non è necessario che faccia parte del codice che memorizza il valore, ma solo dell'output. Ad esempio:

echo "Il tuo ID utente: PAY-"+$userid.
20 set 2012 14:58:26
1

Ecco una soluzione migliore:

add_filter("user_register", "get_unique");
function get_unique($user_id){
    $prefix = "PAY-"; // Prefisso per il numero univoco
    do {
        $unique = mt_rand(); // Genera un numero casuale
        $unique = substr($unique, 0, 3); // Prende solo i primi 3 caratteri
        $unique = $prefix . $unique; // Aggiunge il prefisso
    } while (!check_unique($unique)); // Continua finché non trova un valore unico
    return update_usermeta( $user_id, 'memnumber', $unique ); // Aggiorna i metadati utente
}
function check_unique($unique) {
    global $wpdb;
    // Controlla se il valore esiste già nel database
    $result = $wpdb->get_var("SELECT meta_value from $wpdb->usermeta where meta_key='memnumber' AND meta_value = '$unique'");
    if(empty($result))
        return true; // Valore unico
    return false; // Valore già esistente
}
27 set 2014 04:28:57
Commenti

Per favore aggiungi una spiegazione alla tua risposta: perché potrebbe risolvere il problema?

fuxia fuxia
27 set 2014 04:39:39