generează un număr unic la înregistrarea unui utilizator
Știu că există userID
și username
în baza de date, dar vreau un număr formatat și unic pentru utilizare în lumea reală.
De exemplu: "2014xxxx" unde 2014 este anul, iar xxxx este generat aleatoriu la înregistrarea utilizatorului.
Este posibil acest lucru?
Dacă da, care este cea mai simplă și rapidă metodă de a realiza acest lucru?

Aceasta va face ceea ce doriți, iar ambele funcții ar trebui plasate în fișierul dvs. functions.php.
Funcția my_random_string()
acceptă argumente, astfel încât puteți adăuga date înainte/după șir, precum și să modificați lungimea șirului și caracterele utilizate pentru generarea șirului.
/**
* Generează un șir de caractere aleatorii
*
* @param array $args Argumentele de utilizat pentru această funcție
* @return string|null Șirul aleator generat de această funcție (doar 'if($args['echo'] === false)')
*/
function my_random_string($args = array()){
$defaults = array( // Setează unele valori implicite pentru utilizarea în funcție
'characters' => '0123456789',
'length' => 10,
'before' => '',
'after' => '',
'echo' => false
);
$args = wp_parse_args($args, $defaults); // Combină argumentele transmise de utilizator cu valorile implicite pentru a genera un array final '$args'
if(absint($args['length']) < 1) // Asigură-te că lungimea este validă
return;
$characters_count = strlen($args['characters']); // Verifică câte caractere vor fi utilizate pentru generarea șirului aleator
for($i = 0; $i <= $args['length']; $i++) : // Generează un caracter aleator pentru fiecare dintre '$args['length']'
$start = mt_rand(0, $characters_count);
$random_string.= substr($args['characters'], $start, 1);
endfor;
$random_string = $args['before'] . $random_string . $args['after']; // Adaugă șirurile 'before' și 'after' la șirul aleator
if($args['echo']) : // Verifică dacă șirul aleator trebuie afișat sau returnat
echo $random_string;
else :
return $random_string;
endif;
}
Aici aveți funcția my_on_user_register()
, care este apelată ori de câte ori este generat un nou utilizator și adaugă o intrare în tabelul wp_usermeta
sub cheia random_number
, dar evident puteți schimba numele acestei chei după cum este necesar.
De asemenea, vă recomand să consultați Codex pentru acțiunea user_register
.
/**
* La înregistrarea utilizatorului, generează un număr aleator și îl adaugă în tabelul usermeta
*
* @param required integer $user_id ID-ul utilizatorului nou înregistrat
*/
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);
}
Editare
Conform comentariului dvs., funcția de callback my_on_user_register()
va genera acum un număr care începe cu anul curent și se termină cu un șir aleator de 6 caractere (format doar din numere).
De asemenea, puteți utiliza funcția de callback my_extra_user_profile_fields()
de mai jos pentru a afișa numărul aleator pe pagina de profil a utilizatorului. Rețineți totuși că acest cod nu permite utilizatorului să editeze acel număr.
/**
* Afișează date suplimentare pe pagina de profil a utilizatorului
*
* @param WP_User $user Obiectul cu proprietăți pentru utilizatorul curent care este afișat
*/
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ăți Personalizate'); ?></h3>
<table class="form-table">
<tr>
<th><label for="address"><?php _e('Număr Aleator'); ?></label></th>
<td><?php echo $random_number; ?></td>
</tr>
</table>
<?php
}

Mulțumesc pentru ajutor! Pot vedea numărul aleatoriu în baza de date. Iată lucrul, pot lua primele patru cifre în anul curent și restul într-un număr aleatoriu? De asemenea, cum pot afișa numărul în pagina de profil a utilizatorului?

@pakc1202 - Dorești să poți edita numărul aleatoriu pe pagina de profil sau doar să-l vizualizezi?
