genera un numero univoco durante la registrazione di un utente

6 mar 2015, 06:23:23
Visualizzazioni: 13.7K
Voti: 1

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?

1
Commenti

Questo numero può essere basato sull'userID? Ad esempio 2014xxxxuserID?

Krzysiek Dróżdż Krzysiek Dróżdż
6 mar 2015 08:33:56
Tutte le risposte alla domanda 1
3

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

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?

pakwai122 pakwai122
9 mar 2015 11:01:43

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

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

@pakc1202 - Ho aggiornato la callback my_on_user_register() per formattare il numero casuale come richiesto, e ho aggiunto una nota su come mostrarlo nel profilo Utente.

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