В WordPress по умолчанию есть базовые данные пользователей: логин, email, имя и т.д. Но часто возникает задача добавить свои свойства, например, телефон, дату рождения, социальные сети и другие пользовательские данные. Многие сразу идут за плагинами, но это не всегда необходимо. В этой статье мы подробно разберём, как создать, сохранить и вывести пользовательские свойства (метаполя) для профиля пользователя без плагинов, используя штатные возможности WordPress.
Что такое пользовательские свойства и зачем они нужны
Пользовательские свойства — это дополнительные метаданные, связанные с пользователем, которые расширяют стандартный набор полей. С их помощью можно хранить любые данные, которые важны для сайта: от дополнительной контактной информации до специфичных настроек или статусов.
Использование пользовательских свойств позволяет гибко адаптировать функционал сайта под требования проекта, не завися от сторонних плагинов и не создавая лишних нагрузок.
Добавление новых полей в профиль пользователя (h3) — хук show_user_profile и edit_user_profile
Для того чтобы добавить новые поля на страницу редактирования профиля пользователя в админке WordPress, используются хуки show_user_profile и edit_user_profile. Они позволяют вывести дополнительные поля как для самого пользователя, так и для администратора при редактировании профиля.
Пример добавления поля «Телефон»:
function wpsync_add_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', 'wpsync_add_user_profile_fields');
add_action('edit_user_profile', 'wpsync_add_user_profile_fields');Этот код добавляет поле «Телефон» в профиль пользователя.
Сохранение пользовательских свойств (h3) — хуки personal_options_update и edit_user_profile_update
Чтобы сохранить введённые данные, необходимо обработать отправку формы и записать значение в метаданные пользователя. Для этого используются хуки personal_options_update и edit_user_profile_update.
Пример сохранения поля «Телефон»:
function wpsync_save_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', 'wpsync_save_user_profile_fields');
add_action('edit_user_profile_update', 'wpsync_save_user_profile_fields');Обязательно проверяйте права пользователя, чтобы избежать проблем с безопасностью.
Вывод пользовательских свойств на сайте (h3) — использование get_user_meta
Чтобы вывести пользовательские свойства в шаблонах сайта, используется функция get_user_meta. Например, чтобы вывести телефон текущего пользователя:
$user_id = get_current_user_id();
$phone = get_user_meta($user_id, 'phone', true);
echo 'Телефон: ' . esc_html($phone);Это позволяет гибко использовать дополнительные данные как в личном кабинете, так и на публичных страницах.
Использование пользовательских свойств в фильтрах и запросах (h3) — WP_User_Query с метазапросами
Если необходимо получить список пользователей с определённым свойством, можно использовать класс WP_User_Query с параметром meta_query.
Пример выборки пользователей с телефоном, начинающимся на +7:
$args = [
'meta_query' => [
[
'key' => 'phone',
'value' => '+7',
'compare' => 'LIKE'
]
]
];
$user_query = new WP_User_Query($args);
if (!empty($user_query->get_results())) {
foreach ($user_query->get_results() as $user) {
echo 'Пользователь: ' . $user->display_name . '<br>';
}
} else {
echo 'Пользователи не найдены.';
}Это удобно для построения списков, фильтров и других функций сайта.
Советы по безопасности и валидации пользовательских свойств
При работе с пользовательскими данными очень важно правильно их фильтровать и валидировать. Для текстовых полей используйте sanitize_text_field, для email — sanitize_email, для URL — esc_url_raw и так далее.
Также следует проверять права пользователя, чтобы он не мог изменять чужие данные без разрешения.
Все данные, выводимые на экран, обязательно экранируйте функциями типа esc_html или esc_attr, чтобы избежать XSS-уязвимостей.
Пример расширенного поля с валидацией и кастомным типом (h3) — Дата рождения
Добавим поле даты рождения с валидацией формата и выводом в профиле:
function wpsync_add_birthday_field($user) {
$birthday = get_user_meta($user->ID, 'birthday', true);
?>
<h3>Дата рождения</h3>
<table class="form-table">
<tr>
<th><label for="birthday">Дата рождения</label></th>
<td>
<input type="date" name="birthday" id="birthday" value="<?php echo esc_attr($birthday); ?>" />
<br /><span class="description">Введите дату рождения в формате ГГГГ-ММ-ДД.</span>
</td>
</tr>
</table>
<?php
}
add_action('show_user_profile', 'wpsync_add_birthday_field');
add_action('edit_user_profile', 'wpsync_add_birthday_field');
function wpsync_save_birthday_field($user_id) {
if (!current_user_can('edit_user', $user_id)) {
return false;
}
if (isset($_POST['birthday'])) {
$date = $_POST['birthday'];
// Простая проверка формата YYYY-MM-DD
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $date)) {
update_user_meta($user_id, 'birthday', $date);
} else {
// Можно добавить обработку ошибки или игнорировать
}
}
}
add_action('personal_options_update', 'wpsync_save_birthday_field');
add_action('edit_user_profile_update', 'wpsync_save_birthday_field');Таким образом можно реализовать кастомные поля любой сложности и с необходимой валидацией.
Резюме
Добавление свойств пользователя без плагинов — это отличное решение для тех, кто хочет минимизировать зависимости и контролировать весь код. Использование хуков WordPress позволяет гибко расширять профиль пользователя, сохранять и выводить дополнительные данные. Это полезно при построении сложных CRM-систем, личных кабинетов и кастомных проектов на базе WordPress.
Для повышения удобства можно создать отдельный мини-плагин или добавить код в файл functions.php вашей темы. Если нужна более мощная функциональность, тогда стоит рассмотреть специализированные плагины, например, Clearfy Pro, который оптимизирует работу сайта и расширяет возможности управления.