Что такое пользовательские метаданные в WordPress и зачем их автоматизировать
Пользовательские метаданные (user meta) — это произвольные данные, которые разработчики и администраторы сайта могут прикреплять к учетным записям пользователей. Метаданные позволяют хранить дополнительную информацию, например, предпочтения, настройки профиля, баллы лояльности и многое другое. Автоматизация управления этими данными поможет снизить рутину, исключить ошибки и создать более гибкую систему работы с пользователями.
Ручное добавление и редактирование метаданных через админку неудобно и не подходит для сложных сценариев, когда данные нужно обновлять по событиям, автоматически очищать устаревшие значения или синхронизировать с внешними системами.
В этой статье рассмотрим, как с помощью PHP и стандартных хуков WordPress автоматизировать процессы добавления, обновления и удаления пользовательских метаданных.
Добавление и обновление пользовательских метаданных программно
Для работы с пользовательскими метаданными WordPress предоставляет функции add_user_meta, update_user_meta и delete_user_meta. Рассмотрим их на примерах.
Добавление метаданных при регистрации пользователя
Частая задача — добавить кастомное поле при регистрации. Для этого используем хук user_register, который срабатывает после создания пользователя.
function wptool_add_custom_user_meta($user_id) {
// Добавляем метаданные с ключом 'wptool_favorite_color' и значением по умолчанию
add_user_meta($user_id, 'wptool_favorite_color', 'blue', true);
}
add_action('user_register', 'wptool_add_custom_user_meta');В этом примере при регистрации каждому пользователю будет добавлено мета-значение с любимым цветом.
Обновление метаданных при сохранении профиля
Если необходимо изменить пользовательские метаданные при обновлении профиля, можно использовать хук profile_update с проверкой прав.
function wptool_update_favorite_color_on_profile_save($user_id) {
if (!current_user_can('edit_user', $user_id)) {
return false;
}
if (!empty($_POST['wptool_favorite_color'])) {
update_user_meta($user_id, 'wptool_favorite_color', sanitize_text_field($_POST['wptool_favorite_color']));
}
}
add_action('profile_update', 'wptool_update_favorite_color_on_profile_save');Не забудьте добавить поле ввода на страницу профиля, чтобы пользователь мог менять значение.
Автоматическое удаление устаревших пользовательских метаданных
Иногда метаданные устаревают и их нужно удалять — например, после определённого срока или события. Для этого удобно использовать WP-Cron или регулярные хуки.
Пример автоматической очистки метаданных по времени
Предположим, у нас есть мета-ключ wptool_temp_token, который хранит временный токен с датой создания. По истечении 7 дней токен должен удаляться.
function wptool_delete_expired_tokens() {
global $wpdb;
$meta_key = 'wptool_temp_token';
$expiration_seconds = 7 * DAY_IN_SECONDS;
// Получаем всех пользователей с этим мета-ключом
$users = $wpdb->get_results($wpdb->prepare(
"SELECT user_id, meta_value FROM {$wpdb->usermeta} WHERE meta_key = %s",
$meta_key
));
foreach ($users as $user) {
$token_data = maybe_unserialize($user->meta_value);
if (!$token_data || empty($token_data['created'])) {
continue;
}
$created = intval($token_data['created']);
if (time() - $created > $expiration_seconds) {
delete_user_meta($user->user_id, $meta_key);
}
}
}
// Запускаем раз в сутки
if (!wp_next_scheduled('wptool_daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'wptool_daily_cleanup');
}
add_action('wptool_daily_cleanup', 'wptool_delete_expired_tokens');Этот код создаёт ежедневное событие, которое проверяет и удаляет просроченные токены.
Использование плагина Clearfy Pro для управления метаданными
Если хочется упростить работу с метаданными, можно использовать плагин Clearfy Pro (ссылка на Clearfy Pro). Он содержит инструменты для массового управления метаданными и оптимизации базы данных.
Clearfy Pro позволяет:
- Автоматически удалять устаревшие и неиспользуемые метаданные.
- Очищать метаданные при удалении пользователей.
- Оптимизировать таблицы базы данных, удаляя мусор.
Использование готового решения экономит время и снижает вероятность ошибок при работе с метаданными.
Практические советы по безопасности и производительности
При работе с пользовательскими метаданными важно следовать рекомендациям:
- Всегда валидируйте и санитизируйте данные, особенно если они поступают из форм.
- Используйте префиксы (например,
wptool_) для ключей метаданных, чтобы избежать конфликтов с другими плагинами. - Не храните большие объемы данных в метаданых — для этого лучше использовать отдельные таблицы.
- Регулярно очищайте устаревшие и ненужные метаданные, чтобы не перегружать базу данных.
- Тестируйте автоматизацию на тестовой среде, чтобы избежать потери данных.
Также, если вы используете AJAX для обновления метаданных в реальном времени, не забывайте проверять nonce и права пользователя.
Пример AJAX обновления пользовательского метаданных
add_action('wp_ajax_wptool_update_user_meta', 'wptool_update_user_meta_ajax');
function wptool_update_user_meta_ajax() {
if (!check_ajax_referer('wptool_nonce', 'security', false)) {
wp_send_json_error('Неверный nonce');
}
$user_id = get_current_user_id();
if (!$user_id) {
wp_send_json_error('Пользователь не авторизован');
}
if (isset($_POST['favorite_color'])) {
$color = sanitize_text_field($_POST['favorite_color']);
update_user_meta($user_id, 'wptool_favorite_color', $color);
wp_send_json_success('Данные обновлены');
}
wp_send_json_error('Нет данных для обновления');
}На клиенте используйте JavaScript для вызова AJAX с параметром security — nonce, который нужно генерировать и выводить в страницу.