Как добавить пользовательские поля формы на страницу профиля пользователя?
На странице профиля пользователя есть следующие поля:
Имя пользователя
Имя
Фамилия
Псевдоним
Отображаемое имя
Контактная информация
Электронная почта
Веб-сайт
AIM
Yahoo IM
Jabber / Google Talk
Как можно добавить больше полей в этот раздел. Такие поля, как номер телефона, адрес или любые другие.

Вам необходимо использовать хуки 'show_user_profile'
, 'edit_user_profile'
, 'personal_options_update'
и 'edit_user_profile_update'
.
Вот код для добавления поля "Телефон":
add_action( 'show_user_profile', 'yoursite_extra_user_profile_fields' );
add_action( 'edit_user_profile', 'yoursite_extra_user_profile_fields' );
function yoursite_extra_user_profile_fields( $user ) {
?>
<h3><?php _e("Дополнительная информация профиля", "blank"); ?></h3>
<table class="form-table">
<tr>
<th><label for="phone"><?php _e("Телефон"); ?></label></th>
<td>
<input type="text" name="phone" id="phone" class="regular-text"
value="<?php echo esc_attr( get_the_author_meta( 'phone', $user->ID ) ); ?>" /><br />
<span class="description"><?php _e("Пожалуйста, введите ваш телефон."); ?></span>
</td>
</tr>
</table>
<?php
}
add_action( 'personal_options_update', 'yoursite_save_extra_user_profile_fields' );
add_action( 'edit_user_profile_update', 'yoursite_save_extra_user_profile_fields' );
function yoursite_save_extra_user_profile_fields( $user_id ) {
$saved = false;
if ( current_user_can( 'edit_user', $user_id ) ) {
update_user_meta( $user_id, 'phone', $_POST['phone'] );
$saved = true;
}
return true;
}
Этот код добавит поле на экран редактирования пользователя, которое будет выглядеть примерно так:
Также доступны несколько статей по теме, которые могут быть полезны:
- Добавление и использование пользовательских полей профиля
- Добавление дополнительных полей в профиль пользователя WordPress
Или, если вы предпочитаете не писать код самостоятельно, существуют плагины, добавляющие подобные функции, например следующие (хотя уверен, есть и другие):

Майк, у меня возникла куча проблем с сохранением моих изменений. В итоге я решил это, сделав полный "поиск и замену". Для себя на будущее: поля "name" и "title" обязательно должны точно совпадать?

@Jonathan Wold - "поля "name" и "title" обязательно должны точно совпадать?" Ты не дал мне достаточно контекста, чтобы я мог ответить. И, возможно, тебе стоит создать полностью новый вопрос.

// удаляем aim, jabber, yim
function hide_profile_fields( $contactmethods ) {
unset($contactmethods['aim']);
unset($contactmethods['jabber']);
unset($contactmethods['yim']);
return $contactmethods;
}
// добавляем новые поля
function my_new_contactmethods( $contactmethods ) {
//добавляем День рождения
$contactmethods['birthday'] = 'День рождения';
//добавляем Адрес
$contactmethods['address'] = 'Адрес';
//добавляем Город
$contactmethods['city'] = 'Город';
//добавляем Область/Штат
$contactmethods['state'] = 'Область/Штат';
//добавляем Почтовый индекс
$contactmethods['postcode'] = 'Почтовый индекс';
//добавляем Телефон
$contactmethods['phone'] = 'Телефон';
//добавляем Мобильный телефон
$contactmethods['mphone'] = 'Мобильный телефон';
return $contactmethods;
}
add_filter('user_contactmethods','my_new_contactmethods',10,1);
add_filter('user_contactmethods','hide_profile_fields',10,1);
Надеюсь, это поможет.
Источник: WPBeginner
