generează un număr unic la înregistrarea unui utilizator

6 mar. 2015, 06:23:23
Vizualizări: 13.7K
Voturi: 1

Ș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?

1
Comentarii

Poate fi acest număr bazat pe userID? De exemplu 2014xxxxuserID?

Krzysiek Dróżdż Krzysiek Dróżdż
6 mar. 2015 08:33:56
Toate răspunsurile la întrebare 1
3

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
}
6 mar. 2015 12:47:54
Comentarii

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?

pakwai122 pakwai122
9 mar. 2015 11:01:43

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

David Gard David Gard
9 mar. 2015 11:25:16

@pakc1202 - Am actualizat callback-ul my_on_user_register() pentru a formata numărul aleatoriu conform cerințelor tale și am adăugat o notă despre afișarea în profilul Utilizatorilor.

David Gard David Gard
9 mar. 2015 11:45:12