В WordPress по умолчанию есть базовый набор полей для пользователей: имя, email, роль и т.д. Но часто требуется добавить собственные свойства — например, дополнительные контактные данные, уникальные идентификаторы или пользовательские настройки. Для этого используются пользовательские мета-поля пользователей. В этой статье подробно разберём, как создавать, выводить и сохранять такие свойства через код.
Что такое пользовательские мета-поля в WordPress
Пользовательские мета-поля — это дополнительные данные, которые хранятся в таблице wp_usermeta и привязаны к конкретному пользователю. Это гибкий способ расширить стандартный профиль без изменения ядра WordPress.
Каждое мета-поле состоит из ключа (названия) и значения. С помощью функций WordPress мы можем создавать, читать, обновлять и удалять эти данные.
Добавление пользовательских свойств в профиль пользователя
Вывод полей в админке WordPress
Чтобы добавить новые поля в страницу редактирования пользователя, используют хук show_user_profile и edit_user_profile. Ниже пример добавления поля "Телефон" в профиль пользователя:
function wpsyncru_add_custom_user_profile_fields($user) {
?>
<h3>Дополнительные данные пользователя</h3>
<table class="form-table">
<tr>
<th><label for="phone">Телефон</label></th>
<td>
<input type="text" name="wpsyncru_phone" id="phone" value="<?php echo esc_attr(get_user_meta($user->ID, 'wpsyncru_phone', true)); ?>" class="regular-text" /><br />
<span class="description">Введите номер телефона пользователя.</span>
</td>
</tr>
</table>
<?php
}
add_action('show_user_profile', 'wpsyncru_add_custom_user_profile_fields');
add_action('edit_user_profile', 'wpsyncru_add_custom_user_profile_fields');В этом коде создаётся поле с именем мета-ключа wpsyncru_phone. Мы используем префикс wpsyncru_ для предотвращения конфликтов с другими плагинами.
Сохранение пользовательских свойств
Для сохранения введённых данных необходимо обработать их при отправке формы. Используем хуки personal_options_update и edit_user_profile_update:
function wpsyncru_save_custom_user_profile_fields($user_id) {
if (!current_user_can('edit_user', $user_id)) {
return false;
}
if (isset($_POST['wpsyncru_phone'])) {
update_user_meta($user_id, 'wpsyncru_phone', sanitize_text_field($_POST['wpsyncru_phone']));
}
}
add_action('personal_options_update', 'wpsyncru_save_custom_user_profile_fields');
add_action('edit_user_profile_update', 'wpsyncru_save_custom_user_profile_fields');Обратите внимание на проверку прав пользователя и очистку данных через функцию sanitize_text_field — это важно для безопасности.
Использование пользовательских свойств в шаблонах и плагинах
Данные, сохранённые в мета-полях пользователя, можно вывести на сайте или использовать в логике плагинов. Пример вывода телефона текущего пользователя:
$user_id = get_current_user_id();
$phone = get_user_meta($user_id, 'wpsyncru_phone', true);
echo 'Ваш телефон: ' . esc_html($phone);Если нужно получить мета-данные другого пользователя, укажите его ID в функции get_user_meta.
Пример: фильтрация пользователей по пользовательскому свойству
Предположим, вы хотите получить всех пользователей с определённым значением свойства "Телефон". Для этого используйте WP_User_Query:
$args = [
'meta_key' => 'wpsyncru_phone',
'meta_value' => '+7 999 123-45-67'
];
$user_query = new WP_User_Query($args);
if (!empty($user_query->results)) {
foreach ($user_query->results as $user) {
echo 'Пользователь: ' . esc_html($user->display_name) . '<br>';
}
} else {
echo 'Пользователи с таким телефоном не найдены';
}Плагины для работы с пользовательскими свойствами
Если не хочется писать код, можно использовать плагины:
- User Meta Manager — удобный интерфейс для создания и управления пользовательскими полями.
- Advanced Custom Fields (ACF) — мощный плагин, который также позволяет создавать мета-поля для пользователей (в PRO версии).
- Clearfy Pro — среди множества функций есть и расширенные возможности работы с мета-данными.
Советы по безопасности и производительности
При работе с пользовательскими мета-полями важно:
- Всегда валидировать и очищать входящие данные с помощью функций типа
sanitize_text_field,sanitize_emailи т.п. - Проверять права текущего пользователя перед сохранением данных.
- Не хранить в мета-полях чувствительную информацию в открытом виде.
- Использовать префиксы в названиях мета-полей, чтобы избежать конфликтов.
- Избегать ненужных запросов к базе данных, кэшировать часто используемые данные.