Как добавить поле в профиле пользователя? Например, страна, возраст и т. Д.

21

Я не очень хорошо разбираюсь в компьютерах / кодах и т. Д. Я использую плагин, который делает форму регистрации простой, и в этой форме я добавил страну, возраст, пол и так далее. Я нажимаю на опцию, которая добавит регистратора в WordPress. Но когда я пытаюсь это сделать, только имя пользователя и адрес электронной почты отображаются в разделе «Пользователи» на сервере. Есть ли способ показать другие поля в разделе «Пользователи»?

Мне нужно их показать для статистического использования.

Хлоя Аус
источник
5
Пожалуйста, попробуйте наш поиск. Вы найдете десятки примеров.
fuxia

Ответы:

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);
}
T.Todua
источник
3

Pro Advanced Пользовательские поля плагин позволит вам добавлять поля в профилях пользователей без каких - либо кодирования.

squarecandy
источник
3
Только про версия
я самый глупый человек
Есть бесплатные способы сделать это с помощью PHP.
Йохан Преториус
Да - определенно можно кодировать это в PHP без ACF, если вы предпочитаете. По моему опыту, это занимает более 100 строк кода, и вам нужно беспокоиться о одноразовой проверке, написании HTML-формы и т. Д. Может потребоваться несколько часов кодирования по сравнению с 5-10 минутами настройки в ACF. Вероятно, зависит от того, используете ли вы уже ACF Pro в проекте.
Squarecandy