Как добавить дополнительное поле в профиль пользователя WordPress

|

Зачем добавлять дополнительные поля в профиль пользователя WordPress

Иногда стандартного набора полей профиля пользователя в WordPress недостаточно для решения конкретных задач. Например, вам может потребоваться добавить телефон, должность, ссылку на соцсеть или любую другую информацию, важную для сайта или бизнеса. Это особенно актуально для сайтов с регистрацией пользователей, форумов, корпоративных порталов и образовательных платформ.

Добавление пользовательских полей позволяет расширить функциональность, повысить удобство работы администратора и пользователей, а также облегчить интеграцию с внешними сервисами. В данной статье мы разберем, как добавить такие поля в раздел редактирования профиля и как сохранить введенные данные.

Как добавить новое поле в профиль пользователя WordPress: хук show_user_profile и edit_user_profile

Для вывода дополнительного поля в профиле пользователя используются хуки show_user_profile и edit_user_profile. Первый срабатывает при просмотре собственного профиля, второй — при редактировании профиля другого пользователя (администратором).

Рассмотрим пример добавления поля "Телефон" с помощью функции wpreboot_add_custom_user_profile_fields:

function wpreboot_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_the_author_meta('phone', $user->ID)); ?>" class="regular-text" /><br />
                <span class="description">Пожалуйста, укажите ваш номер телефона.</span>
            </td>
        </tr>
    </table>
    <?php
}
add_action('show_user_profile', 'wpreboot_add_custom_user_profile_fields');
add_action('edit_user_profile', 'wpreboot_add_custom_user_profile_fields');

В этом коде мы выводим поле ввода с названием "Телефон" в виде таблицы, которая органично вписывается в стандартный интерфейс профиля WordPress.

Сохраняем данные дополнительного поля: хуки personal_options_update и edit_user_profile_update

Чтобы данные, введённые в новое поле, сохранялись, нужно обработать их при обновлении профиля. Для этого используются хуки personal_options_update (когда пользователь обновляет свой профиль) и edit_user_profile_update (когда администратор редактирует профиль другого пользователя).

Реализуем функцию wpreboot_save_custom_user_profile_fields, которая валидирует и сохраняет данные:

function wpreboot_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', 'wpreboot_save_custom_user_profile_fields');
add_action('edit_user_profile_update', 'wpreboot_save_custom_user_profile_fields');

Здесь важно проверять права пользователя, чтобы избежать несанкционированных изменений. Функция sanitize_text_field очищает ввод от потенциально опасных символов.

Пример добавления нескольких полей и улучшение интерфейса

Вы можете добавить сразу несколько полей, например, "Должность" и "Сайт":

function wpreboot_add_multiple_custom_fields($user) {
    ?>
    <h3>Дополнительные контакты</h3>
    <table class="form-table">
        <tr>
            <th><label for="position">Должность</label></th>
            <td>
                <input type="text" name="position" id="position" value="<?php echo esc_attr(get_the_author_meta('position', $user->ID)); ?>" class="regular-text" />
            </td>
        </tr>
        <tr>
            <th><label for="website_custom">Сайт</label></th>
            <td>
                <input type="url" name="website_custom" id="website_custom" value="<?php echo esc_attr(get_the_author_meta('website_custom', $user->ID)); ?>" class="regular-text" />
            </td>
        </tr>
    </table>
    <?php
}
add_action('show_user_profile', 'wpreboot_add_multiple_custom_fields');
add_action('edit_user_profile', 'wpreboot_add_multiple_custom_fields');

И дополним сохранение:

function wpreboot_save_multiple_custom_fields($user_id) {
    if (!current_user_can('edit_user', $user_id)) {
        return false;
    }

    if (isset($_POST['position'])) {
        update_user_meta($user_id, 'position', sanitize_text_field($_POST['position']));
    }

    if (isset($_POST['website_custom'])) {
        update_user_meta($user_id, 'website_custom', esc_url_raw($_POST['website_custom']));
    }
}
add_action('personal_options_update', 'wpreboot_save_multiple_custom_fields');
add_action('edit_user_profile_update', 'wpreboot_save_multiple_custom_fields');

Обратите внимание, что для URL используется функция esc_url_raw, которая корректно очищает ссылку.

Использование плагинов для добавления полей профиля: преимущества и популярные решения

Если вы не хотите писать код вручную, можно воспользоваться готовыми плагинами, которые позволяют легко и гибко добавлять пользовательские поля:

Преимущество плагинов в том, что они предоставляют удобный интерфейс, интеграцию с другими плагинами и часто включают валидацию и стилизацию полей.

Вывод данных дополнительных полей на сайте: использование get_user_meta

После того как данные сохранены, вы можете вывести их в любом месте сайта. Для этого используется функция get_user_meta. Пример вывода телефона пользователя с ID 1:

$phone = get_user_meta(1, 'phone', true);
echo 'Телефон пользователя: ' . esc_html($phone);

Если вы создаете шаблон автора (author.php или author-{slug}.php), то ID пользователя можно получить с помощью get_the_author_meta('ID') и вывести дополнительные поля динамически.

Советы по безопасности и производительности при работе с пользовательскими полями

При работе с дополнительными полями важно учитывать безопасность:

По производительности: не добавляйте слишком много полей без необходимости, т.к. каждое поле — это отдельный мета-запрос к базе данных. Для оптимизации можно кешировать данные или использовать сложные запросы с объединением таблиц.

Как удалить пустые термины в WordPress через код и плагины
05.04.2026
Как кастомизировать страницу входа в WordPress: плагины и код
30.03.2026
Как использовать REST API WordPress для запроса пользователей по мета-полям
13.04.2026
Как удалить все посты из определённой категории в WordPress через код
30.01.2026
Как создать подписку на email в WordPress без плагинов: практическое руководство
21.11.2025
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше