Як додати поле у ​​профіль Користувачі? Наприклад, країна, вік тощо


21

Мені не дуже добре з комп’ютерами / кодами і т. Д. Я використовую плагін, який робить реєстраційну форму цікавою, і я додаю країну, вікову групу, стать тощо. Я натискаю опцію, яка додасть реєстратора в Wordpress користувача. Але коли я його спробую, у розділі "Користувачі" на бекенді відображаються лише ім'я користувача та електронна пошта. Чи є спосіб, щоб інші поля відображалися в розділі "Користувачі"?

Мені потрібно їх показати для статистичних цілей.


5
Спробуйте наш пошук. Ви знайдете десятки прикладів.
фуксія

Відповіді:


58

Ви повинні використовувати show_user_profile, edit_user_profile, personal_options_updateі edit_user_profile_updateгачки.

Ви можете використовувати наступний код для додавання додаткових полів у розділі "Користувач"

Код для додавання додаткових полів у розділі "Редагувати користувача":

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 }

Код для збереження деталей додаткових полів у базі даних :

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

Також на цю тему доступні декілька публікацій блогу, які можуть бути корисними:


Браво це чудово працює.
AVEbrahimi

1
Це не зберігає дані з моїх додаткових полів у БД. Пропозиції, будь ласка? Дякую.
b_dubb

@b_dubb, Ви можете поділитися своїм кодом? Тож я перевірю і повідомлю вас.
Арпіта Хунка

Я вирішив свою проблему, але дякую, що звернувся.
b_dubb

3

Ви краще використовувати get_user_meta(замість get_the_author_meta):

function extra_user_profile_fields( $user ) {
    $meta = get_user_meta($user->ID, 'meta_key_name', false);
}

3

Pro Advanced Користувальницькі поля плагін дозволить вам додавати поля в профілях користувачів без будь - яких кодування.


3
Тільки професійна версія
я

Є безкоштовні способи зробити це за допомогою PHP.
Йохан Преторій

Так - безумовно, можна закодувати це в PHP без ACF, якщо вам зручніше. Мій досвід полягає в тому, що він займає 100+ рядків коду, і вам потрібно переживати про відсутність перевірки, написання HTML форми і т. Д. Може зайняти кілька годин кодування проти 5-10 хв налаштування в ACF. Можливо, це залежить від того, якщо ви вже використовуєте ACF Pro для проекту.
squarecandy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.