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

Вам необходимо использовать хуки 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("Дополнительная информация профиля", "blank"); ?></h3>
<table class="form-table">
<tr>
<th><label for="address"><?php _e("Адрес"); ?></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("Пожалуйста, введите ваш адрес."); ?></span>
</td>
</tr>
<tr>
<th><label for="city"><?php _e("Город"); ?></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("Пожалуйста, введите ваш город."); ?></span>
</td>
</tr>
<tr>
<th><label for="postalcode"><?php _e("Почтовый индекс"); ?></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("Пожалуйста, введите ваш почтовый индекс."); ?></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 ( 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'] );
}
Также доступны несколько статей по теме, которые могут быть полезны:

Это не сохраняет данные из моих дополнительных полей в БД. Есть предложения? Спасибо.

@b_dubb, Не могли бы вы поделиться своим кодом? Я проверю и дам вам знать.

Вам следует добавить проверку nonce, чтобы избежать уязвимостей в безопасности. https://developer.wordpress.org/themes/theme-security/using-nonces/

@KittMedia Nonce уже проверяется функцией check_admin_referer, которая вызывается в user-edit.php перед этими хуками.

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

Да, определенно можно написать это на PHP без ACF, если предпочитаете. По моему опыту, это займет 100+ строк кода, и нужно будет позаботиться о проверке nonce, написании HTML формы и т.д. Может занять несколько часов программирования против 5-10 минут настройки в ACF. Вероятно, зависит от того, используете ли вы уже ACF Pro в проекте.

Вы также можете легко добавить дополнительные поля в существующий раздел "Контактная информация" экрана редактирования профиля пользователя, при этом не требуется настройка дополнительных хуков для обновления метаполей.
function custom_user_profile_contact_fields( $methods ) {
$methods['phone'] = 'Номер телефона';
$methods['location'] = 'Местоположение';
return $methods;
}
add_action( 'user_contactmethods', 'custom_user_profile_contact_fields' );
