Je sais qu'il y a userID
, username
dans la base de données, mais je souhaite un numéro unique et formaté pour une utilisation dans le monde physique.
Par exemple: "2014xxxx" 201414: année, xxxx: générer de manière aléatoire lors de l'enregistrement d'un utilisateur.
C'est possible?
Si possible, quel est le moyen le plus simple et le plus rapide de le faire?
Cela fera ce que vous voulez, et les deux fonctions doivent être placées dans votre fucntions.php fichier.
La fonction my_random_string()
accepte les arguments. Vous pouvez donc ajouter des données avant/après la chaîne, ainsi que modifier la longueur de la chaîne et les caractères utilisés pour la générer.
/**
* Generate a string of random characters
*
* @param array $args The arguments to use for this function
* @return string|null The random string generated by this function (only 'if($args['echo'] === false)')
*/
function my_random_string($args = array()){
$defaults = array( // Set some defaults for the function to use
'characters' => '0123456789',
'length' => 10,
'before' => '',
'after' => '',
'echo' => false
);
$args = wp_parse_args($args, $defaults); // Parse the args passed by the user with the defualts to generate a final '$args' array
if(absint($args['length']) < 1) // Ensure that the length is valid
return;
$characters_count = strlen($args['characters']); // Check how many characters the random string is to be assembled from
for($i = 0; $i <= $args['length']; $i++) : // Generate a random character for each of '$args['length']'
$start = mt_Rand(0, $characters_count);
$random_string.= substr($args['characters'], $start, 1);
endfor;
$random_string = $args['before'] . $random_string . $args['after']; // Add the before and after strings to the random string
if($args['echo']) : // Check if the random string shoule be output or returned
echo $random_string;
else :
return $random_string;
endif;
}
Ici, vous avez la fonction my_on_user_register()
, qui est connectée chaque fois qu'un nouvel utilisateur est généré et ajoute une entrée dans la table wp_usermeta
à la clé random_number
, mais vous pouvez évidemment changer le nom de cette clé si nécessaire.
Je vous recommande également de consulter le Codex pour l'action user_register
.
/**
* Upon user registration, generate a random number and add this to the usermeta table
*
* @param required integer $user_id The ID of the newly registerd user
*/
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);
}
Selon votre commentaire, la fonction de rappel my_on_user_register()
va maintenant générer un nombre qui commence par l'année en cours, puis se termine par une chaîne aléatoire de 6 caractères (comprenant uniquement des nombres).
Vous pouvez également utiliser la fonction de rappel my_extra_user_profile_fields()
ci-dessous pour générer le nombre aléatoire sur la page de profil de l'utilisateur. Notez cependant que ce code ne permet pas à l'utilisateur de modifier ce numéro.
/**
* Output additional data to the users profile page
*
* @param WP_User $user Object properties for the current user that is being displayed
*/
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('Custom Properties'); ?></h3>
<table class="form-table">
<tr>
<th><label for="address"><?php _e('Random Number'); ?></label></th>
<td><?php echo $random_number; ?></td>
</tr>
</table>
<?php
}