Crează ID unic pentru utilizator

20 sept. 2012, 13:49:02
Vizualizări: 17K
Voturi: 0

Trebuie să creez un site de membrii, dar trebuie să atribui fiecărui utilizator înregistrat un număr de ID automat.

De exemplu,

  • Utilizatorul 2 - are codul - pay-102

  • Utilizatorul 3 - are codul - pay-103

Am căutat pe forum și am găsit asta, este exact ceea ce întreb - Care este cea mai rapidă metodă de a genera un ID unic la înregistrarea unui utilizator

Am o bucată de cod care o va adăuga în panoul utilizatorului din zona de administrare:

function fb_add_custom_user_profile_fields( $user ) {
?>
<h3><?php _e('Informații Profil Adiționale', 'themename'); ?></h3>
<table class="form-table">
    <tr>
        <th>
            <label for="memnumber"><?php _e('Număr Membru', 'themename'); ?>
        </label></th>
        <td>
            <input type="text" name="memnumber" id="memnumber" value="<?php echo esc_attr( get_the_author_meta( 'memnumber', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e('Introdu numărul tău de membru.', 'themename'); ?></span>
        </td>
    </tr>
</table>
<?php }
function fb_save_custom_user_profile_fields( $user_id ) {
if ( !current_user_can( 'edit_user', $user_id ) )
    return FALSE;
update_usermeta( $user_id, 'memnumber', $_POST['memnumber'] );
}
add_action( 'show_user_profile', 'fb_add_custom_user_profile_fields' );
add_action( 'edit_user_profile', 'fb_add_custom_user_profile_fields' );
add_action( 'personal_options_update', 'fb_save_custom_user_profile_fields' );
add_action( 'edit_user_profile_update', 'fb_save_custom_user_profile_fields' );

Cum pot completa acel câmp cu un număr incremental care să fie atribuit automat?

4
Comentarii

Salut Andy.. Nu sunt sigur de ce trebuie să creezi un ID unic suplimentar pentru fiecare utilizator. Fiecare utilizator înregistrat în WP are deja un ID de utilizator unic? Presupun că utilizatorii nu ar trebui să poată edita propriul ID de utilizator, deoarece asta ar putea crea conflicte?

Lars Koudal Lars Koudal
20 sept. 2012 13:52:20

Ar trebui să întreb și, dacă acel câmp este populat din baza de date wp_users, iar 'adminul' actualizează numărul cu unul diferit, acest lucru ar actualiza câmpul din baza de date -

Andy Andy
20 sept. 2012 13:53:19

Salut Lars, Clientul are deja un sistem de numerotare pentru membri, a întrebat dacă ar putea continua în același format (sperând, doar schimbarea numărului) - personal nu văd rostul, deoarece este o cerere ciudată, dar aș dori să știu dacă se poate face, dacă va cauza probleme etc etc...

Andy Andy
20 sept. 2012 13:55:40

Salut Andy. Am adăugat un răspuns cu codul de care ai nevoie. Dacă clientul nu are un motiv anume pentru această solicitare, nu aș implementa codul. Dar asta e părerea mea :-)

Lars Koudal Lars Koudal
20 sept. 2012 15:03:15
Toate răspunsurile la întrebare 2
0

Iată un cod care citește cel mai mare număr din tabelul de meta-informații ale utilizatorului și apoi adaugă +1 la acel număr. Acest cod salvează acel număr pentru fiecare utilizator nou înregistrat. Codul este declanșat prin intermediul cârligului de acțiune "user_register".

add_action( 'user_register', 'assignuserid');

function assignuserid($user_id) {
   global $wpdb;
   $latestid=$wpdb->get_var("SELECT meta_value from $wpdb->usermeta where meta_key='memnumber' order by meta_value DESC limit 1;");
   update_user_meta( $user_id, 'memnumber', $latestid+1 );
}

Notă: Dacă prefixul "pay-" este fix, nu trebuie să facă parte din codul care stochează valoarea, ci doar din output. Adică:

echo "ID-ul tău de utilizator: PAY-"+$userid.
20 sept. 2012 14:58:26
1

Iată o soluție mai bună:

add_filter("user_register", "get_unique");
function get_unique($user_id){
    $prefix = "PAY-";
    do {
        $unique = mt_rand();
        $unique = substr($unique, 0, 3);
        $unique = $prefix . $unique;
    } while (!check_unique($unique));
    return update_usermeta( $user_id, 'memnumber', $unique );//$unique;
}
function check_unique($unique) {
    global $wpdb;
    $result = $wpdb->get_var("SELECT meta_value from $wpdb->usermeta where meta_key='memnumber' AND meta_value = '$unique'");
    if(empty($result))
        return true;
    return false;
}
27 sept. 2014 04:28:57
Comentarii

Te rog să adaugi o explicație la răspunsul tău: de ce ar putea rezolva problema?

fuxia fuxia
27 sept. 2014 04:39:39