Как использовать user meta в WordPress для сохранения дополнительных данных

Работа с пользовательскими метаданными (user meta) — это мощный способ расширить функциональность сайта на WordPress, сохраняя дополнительные данные о пользователях. В этой статье подробно разберём, как правильно использовать user meta для хранения, обновления и удаления информации, а также рассмотрим типичные задачи и примеры кода.

Что такое user meta и зачем она нужна

User meta — это дополнительная информация, связанная с конкретным пользователем в WordPress. Она хранится в базе данных в таблице wp_usermeta и позволяет сохранять любые данные: от простых настроек и предпочтений до сложных структурированных данных.

Пример использования user meta:

  • Дополнительные поля профиля пользователя.
  • Настройки подписки, уведомлений.
  • Отслеживание прогресса пользователя на сайте.
  • Хранение пользовательских ролей и статусов, не входящих в стандартный набор.

Используя user meta, вы можете гибко настраивать поведение сайта под конкретного пользователя без необходимости создавать отдельные таблицы.

Основные функции для работы с user meta в WordPress

WordPress предоставляет набор удобных функций для работы с пользовательскими метаданными. Рассмотрим основные:

  • get_user_meta($user_id, $key, $single) — получение значения по ключу.
  • update_user_meta($user_id, $key, $value, $prev_value) — обновление или добавление значения.
  • add_user_meta($user_id, $key, $value, $unique) — добавление нового значения, если ключ уникален.
  • delete_user_meta($user_id, $key, $value) — удаление значения по ключу.

Каждая из этих функций принимает ID пользователя и ключ метаданных. Рассмотрим их подробнее на примерах.

Получение пользовательских метаданных

Чтобы получить значение пользовательского мета-поля, используйте функцию get_user_meta. Например, чтобы получить телефон пользователя:

function wp1_get_user_phone($user_id) {
    // Получаем метаданные 'phone' пользователя
    return get_user_meta($user_id, 'phone', true);
}

Параметр $single = true возвращает одно значение, если поле содержит массив — будет возвращено только первое.

Обновление или добавление user meta

Чтобы сохранить или изменить значение, применяется update_user_meta. Например, чтобы установить или обновить телефон:

function wp1_update_user_phone($user_id, $phone) {
    update_user_meta($user_id, 'phone', $phone);
}

Если ключ не существует — функция создаст его, если существует — обновит.

Удаление пользовательских метаданных

Для удаления определённого значения используйте delete_user_meta:

function wp1_delete_user_phone($user_id) {
    delete_user_meta($user_id, 'phone');
}

Если указать третий параметр $value, удалятся только совпадающие записи.

Пример использования user meta: добавление дополнительного поля в профиль пользователя

Частая задача — добавить новое поле в профиль пользователя в админке и сохранить введённые данные. Рассмотрим, как это сделать.

Добавление поля в профиль

Используем хук show_user_profile и edit_user_profile для вывода поля:

function wp1_show_extra_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', 'wp1_show_extra_profile_fields');
add_action('edit_user_profile', 'wp1_show_extra_profile_fields');

Сохранение данных

Для сохранения введённых данных используем хук personal_options_update и edit_user_profile_update:

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

Таким образом, поле "Телефон" появляется в профиле и сохраняется в базе.

Работа с массивами и сложными данными в user meta

User meta может хранить не только строки, но и массивы или объекты. WordPress автоматически сериализует данные при сохранении и десериализует при получении.

Например, сохраним список любимых категорий пользователя:

function wp1_update_favorite_categories($user_id, $categories) {
    // $categories — массив с ID категорий
    update_user_meta($user_id, 'favorite_categories', $categories);
}

function wp1_get_favorite_categories($user_id) {
    return get_user_meta($user_id, 'favorite_categories', true);
}

Важно: при работе с массивами используйте $single = true, чтобы получить сразу весь сериализованный массив.

Поиск пользователей по метаданным

Иногда нужно получить список пользователей, у которых определённое значение user meta. Для этого используется класс 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 . ' - Телефон: ' . get_user_meta($user->ID, 'phone', true) . '<br>';
    }
} else {
    echo 'Пользователи не найдены.';
}

Это полезно для сегментации пользователей, рассылок и других задач.

Рекомендованные плагины для работы с user meta

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

  • Advanced Custom Fields (ACF) — позволяет создавать дополнительные поля для пользователей через удобный интерфейс и автоматически сохраняет user meta. Подробнее на WPSHOP.RU
  • Profile Builder — мощный плагин для управления профилями пользователей и пользовательскими полями.
  • WP User Manager — удобный инструмент для расширения профилей и работы с user meta.

Выбор зависит от задачи: если нужна простая работа с полями — ACF подойдёт идеально.

Ошибки и подводные камни при работе с user meta

При работе с user meta часто допускают ошибки, которые приводят к проблемам:

  • Использование одинаковых ключей для разных целей — приводят к путанице.
  • Отсутствие проверки прав пользователя при обновлении метаданных.
  • Сохранение больших массивов без необходимости — это может замедлить работу сайта.
  • Неочищенные данные — всегда используйте функции санитизации, например sanitize_text_field или esc_html.

Также избегайте избыточного использования user meta для данных, которые лучше хранить в отдельных таблицах.

Заключение

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

Если необходимо быстро добавить поле в профиль или сохранить произвольные данные пользователя, user meta — лучший выбор. Для более сложных проектов можно применять плагины вроде ACF, которые существенно упрощают работу.

Автоматическое удаление старых записей WordPress по дате публикации
08.04.2026
Удаление заказов WooCommerce по дате и статусу через код
16.05.2026
Автоматическое сброс изображений в WordPress для оптимизации медиа-библиотеки
11.03.2026
Как изменить автора опубликованного поста в WordPress программно
03.03.2026
Как отключить отзывы WooCommerce для отдельных товаров
05.05.2026