Как добавить автоматическое удаление старых transient-данных в WordPress

Transient API в WordPress — мощный инструмент для временного кэширования данных и снижения нагрузки на сервер. Однако со временем накопленные устаревшие transient-данные могут занимать место в базе данных и замедлять работу сайта. В этой статье мы подробно разберём, как автоматизировать процесс удаления старых transient-значений, чтобы поддерживать базу данных в чистоте и улучшать производительность WordPress.

Что такое transient и зачем его удалять

Transient — это специальный тип временных данных, которые сохраняются в базе данных с указанием времени жизни (TTL). Они позволяют кэшировать результаты сложных запросов, внешних API вызовов и других операций, которые требуют ресурсов.

Однако иногда transient-данные не удаляются автоматически, если время жизни истекло, или плагины/темы оставляют их без очистки. Это приводит к накоплению "мертвых" записей в базе, что влияет на размер таблиц и скорость запросов.

Удаление устаревших transient-данных — важный этап оптимизации, особенно на сайтах с большим количеством кэшируемых данных.

Как работает удаление transient в WordPress

По стандарту WordPress сам удаляет просроченные transient при попытке их получения: если время жизни истекло, данные считаются недействительными и удаляются. Но если transient не запрашиваются, они остаются в базе.

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

Где хранятся transient-данные

Transient-данные хранятся в таблице wp_options (или с префиксом вашей базы данных), с ключами, начинающимися на _transient_ и _transient_timeout_. Вторая часть отвечает за время жизни transient.

Реализация автоматического удаления transient с помощью WP Cron

Оптимальный способ — запускать периодическую задачу, которая удаляет все просроченные transient из базы.

Добавим в functions.php вашей темы или в кастомный плагин следующий код.

function wp24_delete_expired_transients() {
    global $wpdb;
    $time = time();
    // Удаляем все transient, у которых истек таймаут
    $transient_timeout_option_name = '_transient_timeout_';
    $sql = $wpdb->prepare(
        "DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b 
        WHERE a.option_name LIKE %s
        AND b.option_name = CONCAT(%s, SUBSTRING(a.option_name, LENGTH(%s) + 1))
        AND b.option_value < %d",
        $transient_timeout_option_name . '%',
        '_transient_',
        '_transient_timeout_',
        $time
    );
    $wpdb->query($sql);
}

// Регистрируем событие при активации темы или плагина
function wp24_schedule_transient_cleanup() {
    if (!wp_next_scheduled('wp24_cron_delete_transients')) {
        wp_schedule_event(time(), 'hourly', 'wp24_cron_delete_transients');
    }
}
add_action('wp', 'wp24_schedule_transient_cleanup');

// Добавляем обработчик события
add_action('wp24_cron_delete_transients', 'wp24_delete_expired_transients');

// Очистка при деактивации плагина или смене темы
function wp24_clear_transient_cleanup_schedule() {
    $timestamp = wp_next_scheduled('wp24_cron_delete_transients');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wp24_cron_delete_transients');
    }
}

Этот код создаёт задачу в WP Cron, которая ежечасно очищает устаревшие transient. Важно, что такая автоматизация не требует дополнительных вмешательств и работает на любом хостинге с поддержкой WP Cron.

Использование плагинов для очистки transient

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

  • Clearfy Pro — многофункциональный оптимизатор, в том числе умеет удалять устаревшие transient, очищать базу и кэш.
  • WP-Optimize — популярный плагин для очистки базы данных, который также удаляет transient и ревизии.
  • Transient Cleaner — специализированный плагин для удаления transient с возможностью запуска очистки вручную или по расписанию.

Пример ссылки на Clearfy Pro с utm метками для wp24.ru:
Clearfy Pro на WPSHOP.RU

Рекомендации по работе с transient

Чтобы эффективно использовать transient и поддерживать чистоту базы данных, следуйте простым рекомендациям:

  • Всегда задавайте разумное время жизни transient, чтобы не хранить данные дольше, чем нужно.
  • При обновлении данных явно удаляйте или обновляйте соответствующие transient.
  • Используйте WP Cron для регулярной очистки устаревших transient, как показано в примере выше.
  • Периодически проверяйте таблицу wp_options на наличие большого количества transient с помощью SQL-запросов.

Как проверить количество transient в базе данных

Для оценки состояния transient выполните следующий SQL-запрос через phpMyAdmin или консоль:

SELECT COUNT(*) as total_transients FROM wp_options WHERE option_name LIKE '_transient_%';

Если число слишком большое — пора применить очистку.

Выводы и практические советы

Transient — удобный способ кэширования в WordPress, но без контроля они могут привести к "засорению" базы и ухудшению производительности. Автоматизация удаления старых transient с помощью WP Cron и периодический аудит базы данных помогут вам поддерживать сайт в отличном состоянии.

Если вы используете темы из каталога WPSHOP, например, Reboot или Root, многие из них совместимы с оптимизирующими плагинами, что дополнительно облегчит управление кэшем и transient.

Автоматическое удаление старого кеша в WordPress без плагинов
20.02.2026
Как создать простой шорткод в WordPress с применением WP24
13.11.2025
Оптимизация загрузки изображений в WordPress: практические методы и примеры
25.11.2025
Как удалить или изменить авторские права WordPress в метаданных темы
08.03.2026
Использование WooCommerce order meta для кастомизированных отчетов
21.05.2026