В стандартном профиле пользователя WordPress есть ограниченный набор полей, которые могут не покрывать все потребности вашего проекта. Например, вы хотите добавить поле с номером телефона, ссылку на соцсети или дополнительные настройки, которые пользователь должен заполнить. В этой статье мы подробно разберём, как добавить свои поля в профиль пользователя WordPress, как сохранить данные и вывести их на сайте.
Почему стоит добавлять дополнительные поля в профиль пользователя WordPress
Иногда стандартных данных пользователя недостаточно для полноценной работы сайта. Дополнительные поля позволяют расширить функционал, например, организовать контактную базу, настроить персонализацию контента или добавить метаданные для авторов и участников сайта. Все эти данные хранятся в пользовательских метаполях (user meta), что обеспечивает гибкость и простоту работы.
Добавление полей в профиль особенно актуально для сайтов с регистрацией, форумов, магазинов и корпоративных порталов.
Рассмотрим, как добавить эти поля без плагинов, используя стандартные хуки WordPress, а также приведём пример с популярным плагином Advanced Custom Fields (ACF) для наглядности.
Как добавить собственные поля в профиль пользователя WordPress без плагинов
Добавляем поле в форму профиля с помощью хука show_user_profile
Для вывода нового поля в форме профиля пользователя есть два хука: show_user_profile (для собственного профиля) и edit_user_profile (для редактирования профиля другого пользователя администратором).
Пример кода для добавления поля "Номер телефона":
function wptask_add_custom_user_profile_fields($user) {
?>
<h3>Дополнительная информация</h3>
<table class="form-table">
<tr>
<th><label for="phone">Номер телефона</label></th>
<td>
<input type="text" name="phone" id="phone" value="<?php echo esc_attr(get_user_meta($user->ID, 'phone', true)); ?>" class="regular-text" /><br />
<span class="description">Пожалуйста, введите ваш номер телефона.</span>
</td>
</tr>
</table>
<?php
}
add_action('show_user_profile', 'wptask_add_custom_user_profile_fields');
add_action('edit_user_profile', 'wptask_add_custom_user_profile_fields');Сохраняем данные поля при обновлении профиля
Чтобы сохранить данные, используем хуки personal_options_update и edit_user_profile_update. Они срабатывают при сохранении профиля.
function wptask_save_custom_user_profile_fields($user_id) {
if (!current_user_can('edit_user', $user_id)) {
return false;
}
if (isset($_POST['phone'])) {
update_user_meta($user_id, 'phone', sanitize_text_field($_POST['phone']));
}
}
add_action('personal_options_update', 'wptask_save_custom_user_profile_fields');
add_action('edit_user_profile_update', 'wptask_save_custom_user_profile_fields');Выводим дополнительное поле на сайте
Чтобы использовать данные из пользовательского профиля, например, вывести номер телефона автора поста, можно получить мета-значение с помощью функции get_user_meta.
$author_id = get_the_author_meta('ID');
$phone = get_user_meta($author_id, 'phone', true);
echo 'Телефон автора: ' . esc_html($phone);Так можно вывести любую дополнительную информацию из профиля пользователя в шаблоне темы.
Использование плагина Advanced Custom Fields (ACF) для создания полей профиля
Если вы предпочитаете не писать код, можно воспользоваться плагином Advanced Custom Fields. Он позволяет удобно создавать поля в админке и отображать их.
Шаги:
- Установите и активируйте плагин ACF.
- Создайте новую группу полей и установите правило показа «Пользователь» -> «Роль» или «Профиль пользователя».
- Добавьте нужные поля — текстовые, телефон, селекты и другие.
- Для вывода используйте функцию
get_field('имя_поля', 'user_'. $user_id);
Пример кода вывода поля «phone» созданного через ACF:
$user_id = get_current_user_id();
$phone = get_field('phone', 'user_' . $user_id);
echo 'Телефон: ' . esc_html($phone);Обработка ошибок и валидация пользовательских данных
Важно не только сохранить данные, но и проверить их корректность. Например, для телефона можно проверить формат с помощью регулярного выражения.
function wptask_validate_phone($phone) {
return preg_match('/^\+?[0-9\s\-\(\)]+$/', $phone);
}
function wptask_save_custom_user_profile_fields($user_id) {
if (!current_user_can('edit_user', $user_id)) {
return false;
}
if (isset($_POST['phone'])) {
$phone = sanitize_text_field($_POST['phone']);
if (wptask_validate_phone($phone)) {
update_user_meta($user_id, 'phone', $phone);
} else {
// Можно добавить уведомление об ошибке
}
}
}Так вы убережёте базу данных от некорректных или вредоносных данных.
Итог: что вы получите
- Удобный интерфейс для ввода дополнительных данных пользователя в админке.
- Гибкость хранения и использования пользовательских метаданных.
- Возможность расширять профиль под любые задачи сайта.
Данный способ отлично подходит для кастомных проектов, где нужно больше информации о пользователях, чем предлагает WordPress по умолчанию.