Cum adaug un câmp în profilul utilizatorilor? De exemplu, țară, vârstă etc

16 ian. 2016, 10:40:46
Vizualizări: 138K
Voturi: 46

Nu mă pricep foarte bine la computere/coduri etc. Folosesc un plugin care creează un formular de înregistrare și în acel formular am adăugat țara, grupa de vârstă, genul și așa mai departe. Am selectat opțiunea care va adăuga persoana înregistrată în sistemul de utilizatori WordPress. Dar când testez, doar numele de utilizator și emailul apar în secțiunea Utilizatori din backend. Există vreo modalitate ca și celelalte câmpuri să apară în secțiunea utilizatorilor?

Am nevoie ca acestea să fie vizibile pentru utilizări statistice.

1
Comentarii

+1 pentru introducere - s-ar putea să mă inspir din ea! :-D

Boycott A.I. Boycott A.I.
12 nov. 2024 21:02:50
Toate răspunsurile la întrebare 4
7
106

Trebuie să folosești hook-urile show_user_profile, edit_user_profile, personal_options_update și edit_user_profile_update.

Poți folosi următorul cod pentru a adăuga câmpuri suplimentare în secțiunea Utilizator

Cod pentru adăugarea de câmpuri suplimentare în secțiunea Editare Utilizator:

add_action( 'show_user_profile', 'extra_user_profile_fields' );
add_action( 'edit_user_profile', 'extra_user_profile_fields' );

function extra_user_profile_fields( $user ) { ?>
    <h3><?php _e("Informații suplimentare de profil", "blank"); ?></h3>

    <table class="form-table">
    <tr>
        <th><label for="address"><?php _e("Adresă"); ?></label></th>
        <td>
            <input type="text" name="address" id="address" value="<?php echo esc_attr( get_the_author_meta( 'address', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Vă rugăm să introduceți adresa."); ?></span>
        </td>
    </tr>
    <tr>
        <th><label for="city"><?php _e("Oraș"); ?></label></th>
        <td>
            <input type="text" name="city" id="city" value="<?php echo esc_attr( get_the_author_meta( 'city', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Vă rugăm să introduceți orașul."); ?></span>
        </td>
    </tr>
    <tr>
    <th><label for="postalcode"><?php _e("Cod poștal"); ?></label></th>
        <td>
            <input type="text" name="postalcode" id="postalcode" value="<?php echo esc_attr( get_the_author_meta( 'postalcode', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Vă rugăm să introduceți codul poștal."); ?></span>
        </td>
    </tr>
    </table>
<?php }

Cod pentru salvarea detaliilor câmpurilor suplimentare în baza de date:

add_action( 'personal_options_update', 'save_extra_user_profile_fields' );
add_action( 'edit_user_profile_update', 'save_extra_user_profile_fields' );

function save_extra_user_profile_fields( $user_id ) {
    if ( empty( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'update-user_' . $user_id ) ) {
        return;
    }
    
    if ( !current_user_can( 'edit_user', $user_id ) ) { 
        return false; 
    }
    update_user_meta( $user_id, 'address', $_POST['address'] );
    update_user_meta( $user_id, 'city', $_POST['city'] );
    update_user_meta( $user_id, 'postalcode', $_POST['postalcode'] );
}

Există și mai multe articole pe blog care ar putea fi utile:

16 ian. 2016 13:13:41
Comentarii

Bravo, funcționează excelent.

AVEbrahimi AVEbrahimi
15 mar. 2018 15:31:25

Aceasta nu stochează date din câmpurile mele suplimentare în baza de date. Sugestii, vă rog? Mulțumesc.

b_dubb b_dubb
3 iul. 2019 19:12:40

@b_dubb, Poți să împărtășești codul tău? Așa că îl voi verifica și îți voi spune.

Arpita Hunka Arpita Hunka
2 aug. 2019 17:38:28

Am rezolvat problema mea, dar mulțumesc pentru ajutor.

b_dubb b_dubb
5 aug. 2019 20:31:38

Ar trebui să adaugi verificarea nonce pentru a evita vulnerabilitățile de securitate. https://developer.wordpress.org/themes/theme-security/using-nonces/

squarecandy squarecandy
30 ian. 2020 20:26:41

Am adăugat verificarea nonce.

KittMedia KittMedia
21 ian. 2021 12:41:37

@KittMedia Nonce-ul este deja verificat de check_admin_referer care este apelat din user-edit.php înainte de aceste hook-uri.

Rup Rup
21 ian. 2021 13:00:57
Arată celelalte 2 comentarii
4
10

Plugin-ul Advanced Custom Fields Pro vă va permite să adăugați câmpuri în profilurile utilizatorilor fără să scrieți cod.

20 sept. 2017 06:33:52
Comentarii

Doar versiunea pro

I am the Most Stupid Person I am the Most Stupid Person
4 mar. 2019 14:16:43

Există metode gratuite de a face asta cu PHP.

Drmzindec Drmzindec
15 oct. 2019 12:05:54

Da - cu siguranță este posibil să codezi asta în PHP fără ACF dacă preferi. Experiența mea este că necesită peste 100 de linii de cod și trebuie să te ocupi de verificarea nonce, scrierea HTML-ului formularului, etc. Ar putea dura câteva ore de codare față de 5-10 minute de configurare în ACF. Probabil depinde dacă deja folosești ACF Pro într-un proiect.

squarecandy squarecandy
15 oct. 2019 19:02:01

WordPress ar trebui să facă asta fără să te oblige să hardcodezi formulare HTML în PHP. Susțin și eu ACF, ar trebui să facă parte din nucleu. Poți defini și câmpuri prin cod și să le versionzi.

marek.m marek.m
30 ian. 2020 16:13:56
1

Este mai bine să folosești get_user_meta (în loc de get_the_author_meta):

function extra_user_profile_fields( $user ) {
    $meta = get_user_meta($user->ID, 'meta_key_name', false);
}
4 dec. 2018 13:14:25
Comentarii

ambele funcționează fără probleme!

Fernando Baltazar Fernando Baltazar
18 aug. 2020 22:04:25
2

De asemenea, poți adăuga cu ușurință câmpuri suplimentare în secțiunea existentă "Informații de contact" din ecranul de editare al profilului utilizatorului, fără a fi necesară configurarea altor hook-uri pentru actualizarea câmpurilor meta.

function custom_user_profile_contact_fields( $methods ) {
    $methods['phone'] = 'Număr de telefon';
    $methods['location'] = 'Locație';
    return $methods;
}
add_action( 'user_contactmethods', 'custom_user_profile_contact_fields' );
6 feb. 2023 21:48:56
Comentarii

de departe cel mai simplu răspuns

RafaSashi RafaSashi
1 mai 2023 12:19:29

@RafaSashi Poate fi, dar doar ține minte că uneori sunt necesare câmpuri mai avansate și această metodă funcționează doar pentru utilizarea câmpurilor clasice de text pe o singură linie. ;)

Talk Nerdy To Me Talk Nerdy To Me
3 mai 2023 18:36:36