Creare un ID univoco per l'utente
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?
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.

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
}
