genera un numero univoco durante la registrazione di un utente
So che esistono userID
, username
nel database, ma voglio un numero formattato e univoco da utilizzare nel mondo reale.
Ad esempio: "2014xxxx" dove 2014 è l'anno e xxxx sono cifre generate casualmente durante la registrazione di un utente.
È possibile farlo?
Se sì, qual è il modo più semplice e veloce per implementarlo?
Questo farà ciò che desideri, e entrambe le funzioni dovrebbero essere inserite nel tuo file functions.php.
La funzione my_random_string()
accetta argomenti, quindi puoi aggiungere dati prima/dopo la stringa, oltre a modificare la lunghezza della stringa e i caratteri utilizzati per generarla.
/**
* Genera una stringa di caratteri casuali
*
* @param array $args Gli argomenti da utilizzare per questa funzione
* @return string|null La stringa casuale generata da questa funzione (solo 'if($args['echo'] === false)')
*/
function my_random_string($args = array()){
$defaults = array( // Imposta alcuni valori predefiniti per la funzione
'characters' => '0123456789',
'length' => 10,
'before' => '',
'after' => '',
'echo' => false
);
$args = wp_parse_args($args, $defaults); // Combina gli argomenti passati dall'utente con i valori predefiniti per generare un array '$args' finale
if(absint($args['length']) < 1) // Verifica che la lunghezza sia valida
return;
$characters_count = strlen($args['characters']); // Conta quanti caratteri verranno utilizzati per assemblare la stringa casuale
for($i = 0; $i <= $args['length']; $i++) : // Genera un carattere casuale per ciascuno dei '$args['length']'
$start = mt_rand(0, $characters_count);
$random_string.= substr($args['characters'], $start, 1);
endfor;
$random_string = $args['before'] . $random_string . $args['after']; // Aggiunge le stringhe before e after alla stringa casuale
if($args['echo']) : // Verifica se la stringa casuale deve essere stampata o restituita
echo $random_string;
else :
return $random_string;
endif;
}
Qui hai la funzione my_on_user_register()
, che viene agganciata ogni volta che viene creato un nuovo utente e aggiunge una voce nella tabella wp_usermeta
con la chiave random_number
, ma ovviamente puoi cambiare il nome di questa chiave come preferisci.
Ti consiglio anche di dare un'occhiata al Codex per l'azione user_register
.
/**
* Alla registrazione dell'utente, genera un numero casuale e aggiungilo alla tabella usermeta
*
* @param required integer $user_id L'ID dell'utente appena registrato
*/
add_action('user_register', 'my_on_user_register');
function my_on_user_register($user_id){
$args = array(
'length' => 6,
'before' => date("Y")
);
$random_number = my_random_string($args);
update_user_meta($user_id, 'random_number', $random_number);
}
Modifica
Come da tuo commento, la funzione di callback my_on_user_register()
ora genererà un numero che inizia con l'anno corrente e termina con una stringa casuale di 6 caratteri (composta solo da numeri).
Puoi anche utilizzare la seguente funzione di callback my_extra_user_profile_fields()
per mostrare il numero casuale nella pagina del profilo utente. Tieni presente che questo codice non consente all'utente di modificare quel numero.
/**
* Mostra dati aggiuntivi nella pagina del profilo utente
*
* @param WP_User $user Proprietà dell'oggetto per l'utente corrente che viene visualizzato
*/
add_action('show_user_profile', 'my_extra_user_profile_fields');
add_action('edit_user_profile', 'my_extra_user_profile_fields');
function my_extra_user_profile_fields($user){
$random_number = get_the_author_meta('random_number', $user->ID);
?>
<h3><?php _e('Proprietà Personalizzate'); ?></h3>
<table class="form-table">
<tr>
<th><label for="address"><?php _e('Numero Casuale'); ?></label></th>
<td><?php echo $random_number; ?></td>
</tr>
</table>
<?php
}

Grazie per il tuo aiuto! Posso vedere il numero casuale nel database. Ecco la cosa, posso prendere le prime quattro cifre come anno corrente e il resto come numero casuale? Inoltre, come posso mostrare il numero nella pagina del profilo utente?

@pakc1202 - Vuoi poter modificare il numero casuale nella pagina del profilo, o solo visualizzarlo?
