В WordPress по умолчанию можно хранить информацию о пользователях, такую как имя, email, роль и т.д. Но часто возникает задача добавить уникальные или дополнительные поля для пользователей — например, ссылки на соцсети, дополнительные контакты, дату рождения или другую информацию. В этой статье подробно разберём, как добавить уникальные пользовательские поля в WordPress, как сохранить и отобразить их, а также рассмотрим полезные плагины для упрощения задачи.
Почему стоит использовать уникальные поля для пользователей в WordPress
Добавление кастомных полей позволяет расширить стандартные возможности WordPress и адаптировать систему под конкретные задачи сайта. Это особенно важно для сайтов с регистрацией, магазинов на WooCommerce, обучающих платформ или сообществ.
Уникальные поля помогают:
- Собрать дополнительную информацию о пользователях;
- Персонализировать контент и интерфейс;
- Использовать данные в бизнес-логике, например, для рассылок или фильтрации;
- Улучшить администрирование и статистику.
Для реализации можно использовать как плагины, так и собственный код, что даст максимальный контроль.
Добавление пользовательских полей через функции WordPress
Самый гибкий способ — добавить поля программно с помощью хуков WordPress. Рассмотрим пример добавления поля "Телефон" в профиль пользователя в админке и на фронтенде.
Добавление поля в админку профиля пользователя
Для начала нужно добавить поле в форму редактирования пользователя в админке. Используем хук show_user_profile и edit_user_profile:
function wptips_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', 'wptips_add_custom_user_profile_fields');
add_action('edit_user_profile', 'wptips_add_custom_user_profile_fields');
Этот код добавит новое поле "Телефон" в профиль пользователя в админке.
Сохранение пользовательского поля
Чтобы сохранить значение поля, нужно повесить функцию на хуки personal_options_update и edit_user_profile_update:
function wptips_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', 'wptips_save_custom_user_profile_fields');
add_action('edit_user_profile_update', 'wptips_save_custom_user_profile_fields');
Таким образом, введённые данные будут сохранены в мета-поле пользователя.
Отображение уникальных полей на фронтенде
Часто нужно показать эти данные на странице профиля пользователя или в комментариях. Рассмотрим пример вывода поля «Телефон» в шаблоне:
$user_id = get_current_user_id();
$phone = get_user_meta($user_id, 'phone', true);
if ($phone) {
echo '<p><strong>Телефон:</strong> ' . esc_html($phone) . '</p>';
}
Этот код можно вставить в шаблон темы или в шорткод для вывода информации.
Использование плагинов для добавления уникальных пользовательских полей
Если нет желания писать код, можно применить готовые плагины. Рассмотрим наиболее популярные и удобные:
1. Advanced Custom Fields (ACF)
ACF позволяет создавать произвольные поля не только для записей, но и для пользователей. Для этого в настройках поля укажите локацию "Пользователь". Плагин предоставляет удобный интерфейс для добавления различных типов полей — текст, выбор, даты, файлы и др.
Преимущества:
- Простота в использовании;
- Широкие возможности;
- Отличная совместимость с темами и плагинами.
После добавления поля, вывести его можно так:
echo esc_html(get_field('phone', 'user_' . $user_id));
2. Profile Builder
Плагин позволяет создавать кастомные поля в регистрационных формах и профилях пользователей. Есть бесплатная и платная версия с расширенным функционалом.
Функционал:
- Добавление и редактирование полей в профиле;
- Настройка видимости и валидация;
- Использование шорткодов для вывода форм.
3. User Meta Pro (платный)
Очень мощный плагин для управления пользовательскими полями, с множеством типов полей, условной логикой и интеграцией с WooCommerce.
Советы по организации и безопасности пользовательских полей
При работе с пользовательскими полями важно учитывать безопасность и удобство:
- Всегда фильтруйте и очищайте данные перед сохранением (функции
sanitize_text_field,esc_htmlи др.). - Проверяйте права пользователя перед сохранением данных.
- Не храните конфиденциальную информацию в открытом виде.
- Проявляйте внимание к удобству интерфейса — добавляйте пояснения и валидацию.
- Если добавляете поля в формы регистрации, тестируйте корректность работы и защиту от spam.
Пример комплексного решения: добавление поля "Telegram" с проверкой и выводом
Рассмотрим пример добавления поля Telegram с проверкой формата и выводом на фронтенде.
function wptips_add_telegram_field($user) {
?>
<h3>Контакты</h3>
<table class="form-table">
<tr>
<th><label for="telegram">Telegram</label></th>
<td>
<input type="text" name="telegram" id="telegram" value="<?php echo esc_attr(get_user_meta($user->ID, 'telegram', true)); ?>" class="regular-text" />
<br /><span class="description">Введите ваш Telegram, например @username.</span>
</td>
</tr>
</table>
<?php
}
add_action('show_user_profile', 'wptips_add_telegram_field');
add_action('edit_user_profile', 'wptips_add_telegram_field');
function wptips_save_telegram_field($user_id) {
if (!current_user_can('edit_user', $user_id)) {
return false;
}
if (isset($_POST['telegram'])) {
$telegram = sanitize_text_field($_POST['telegram']);
if (preg_match('/^@\w{5,}$/', $telegram)) { // проверяем формат
update_user_meta($user_id, 'telegram', $telegram);
}
}
}
add_action('personal_options_update', 'wptips_save_telegram_field');
add_action('edit_user_profile_update', 'wptips_save_telegram_field');
// Вывод на фронтенде
function wptips_show_telegram($user_id) {
$telegram = get_user_meta($user_id, 'telegram', true);
if ($telegram) {
echo '<p><strong>Telegram:</strong> <a href="https://t.me/' . esc_attr(substr($telegram, 1)) . '" target="_blank">' . esc_html($telegram) . '</a></p>';
}
}
Заключение
Добавление уникальных пользовательских полей — мощный способ кастомизировать WordPress и сделать сайт более функциональным. Выбор между кодом и плагинами зависит от задач и навыков, но даже минимальный код позволяет быстро реализовать базовые поля. Используйте проверенные методы и не забывайте про безопасность и удобство пользователей.
Для расширенных возможностей рекомендую обратить внимание на плагины, которые поддерживаются и регулярно обновляются, например, Advanced Custom Fields.