Jak dodać pole w profilu użytkowników? Na przykład kraj, wiek itp

21

Nie jestem zbyt dobry w komputerach / kodach itp. Używam wtyczki, która sprawia, że ​​formularz rejestracyjny jest trudny iw tej formie dodałem kraj, grupę wiekową, płeć i tak dalej. Klikam opcję, która doda rejestrującego do wordpress użytkownika rzecz. Ale kiedy próbuję, tylko nazwa użytkownika i adres e-mail są wyświetlane w sekcji Użytkownicy na zapleczu. Czy istnieje sposób, aby inne pola wyświetlały się w sekcji użytkownicy?

Potrzebuję ich do celów statystycznych.

Chloe Aus
źródło
5
Spróbuj naszego wyszukiwania. Znajdziesz dziesiątki przykładów.
fuxia

Odpowiedzi:

58

Trzeba użyć show_user_profile, edit_user_profile, personal_options_updateoraz edit_user_profile_updatehaczyki.

Możesz użyć następującego kodu, aby dodać dodatkowe pola w sekcji Użytkownik

Kod dodawania dodatkowych pól w sekcji Edytuj użytkownika:

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("Extra profile information", "blank"); ?></h3>

    <table class="form-table">
    <tr>
        <th><label for="address"><?php _e("Address"); ?></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("Please enter your address."); ?></span>
        </td>
    </tr>
    <tr>
        <th><label for="city"><?php _e("City"); ?></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("Please enter your city."); ?></span>
        </td>
    </tr>
    <tr>
    <th><label for="postalcode"><?php _e("Postal Code"); ?></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("Please enter your postal code."); ?></span>
        </td>
    </tr>
    </table>
<?php }

Kod do zapisywania szczegółów dodatkowych pól w bazie danych :

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 ( !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'] );
}

Istnieje również kilka postów na blogu na ten temat, które mogą być pomocne:

Arpita Hunka
źródło
Brawo, to działa świetnie.
AVEbrahimi,
1
To nie jest przechowywanie danych z moich dodatkowych pól w DB. Sugestie proszę? Dzięki.
b_dubb
@b_dubb, czy możesz udostępnić swój kod? Więc sprawdzę i dam znać.
Arpita Hunka
Rozwiązałem problem, ale dziękuję za kontakt.
b_dubb
3

Lepiej użyj get_user_meta(zamiast get_the_author_meta):

function extra_user_profile_fields( $user ) {
    $meta = get_user_meta($user->ID, 'meta_key_name', false);
}
T.Todua
źródło
3

Pro Advanced Pola niestandardowe Wtyczka pozwala na dodawanie pól do profili użytkowników bez kodowania.

Squarecandy
źródło
3
Tylko wersja pro
jestem najbardziej głupią osobą
Są darmowe sposoby na zrobienie tego z PHP.
Johan Pretorius
Tak - zdecydowanie można kodować to w PHP bez ACF, jeśli wolisz. Z mojego doświadczenia wynika, że ​​zajmuje to ponad 100 wierszy kodu i musisz się martwić weryfikacją nonce, pisaniem kodu HTML formularza itp. Może to zająć kilka godzin kodowania w porównaniu z 5-10 minutami konfiguracji w ACF. Prawdopodobnie zależy to od tego, czy używasz ACF Pro już w projekcie.
squarecandy