Как удалить старые transient данные в WordPress без плагинов

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

Что такое transient данные и почему важно их удалять

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

Но иногда transient не удаляются автоматически, например, если срок жизни истёк, но процесс очистки не сработал или плагин, создавший transient, перестал поддерживаться. В итоге в таблице wp_options накапливаются «мусорные» записи с префиксом _transient_ и _transient_timeout_.

Это приводит к:

  • увеличению размера базы данных;
  • замедлению запросов к базе;
  • возможным ошибкам в отображении кэшированных данных.

Регулярное удаление старых transient помогает поддерживать базу данных в порядке и улучшает производительность сайта.

Как вручную найти и удалить устаревшие transient данные

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

  • _transient_ключ — сами данные;
  • _transient_timeout_ключ — время истечения в UNIX-формате.

Чтобы найти устаревшие transient, нужно сравнить текущее время с timestamp в _transient_timeout_.

Пример SQL-запроса для поиска просроченных transient:

SELECT option_name FROM wp_options WHERE option_name LIKE '_transient_timeout_%' AND option_value < UNIX_TIMESTAMP();

Этот запрос выведет все ключи timeout, время которых меньше текущего — то есть просроченные.

Удаление просроченных transient

Чтобы удалить эти записи, можно использовать следующий SQL-запрос:

DELETE FROM wp_options WHERE option_name LIKE '_transient_timeout_%' AND option_value < UNIX_TIMESTAMP();

Но нужно удалить не только timeout, но и сами transient данные.

Для удаления всех пар ключей (данных и timeout) просроченных transient можно применить такой подход:

DELETE options_data, options_timeout FROM wp_options AS options_data INNER JOIN wp_options AS options_timeout ON options_timeout.option_name = CONCAT('_transient_timeout_', SUBSTRING(options_data.option_name, 11)) WHERE options_data.option_name LIKE '_transient_%' AND options_timeout.option_value < UNIX_TIMESTAMP();
<

Этот запрос удалит одновременно и данные, и связанные с ними timeout.

Автоматизация удаления старых transient через PHP код

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

Ниже пример функции wp24_delete_expired_transients, которая удаляет просроченные transient:

function wp24_delete_expired_transients() {
    global $wpdb;
    $time = time();

    // Получаем все ключи просроченных transient timeout
    $expired = $wpdb->get_col(
        $wpdb->prepare(
            "SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE %s AND option_value < %d",
            '_transient_timeout_%',
            $time
        )
    );

    if (empty($expired)) {
        return;
    }

    foreach ($expired as $timeout_key) {
        // Получаем имя transient без префикса
        $transient_key = str_replace('_transient_timeout_', '', $timeout_key);

        // Удаляем transient данные и timeout
        delete_transient($transient_key);
    }
}

// Запускаем функцию, например, при инициализации админки
add_action('admin_init', 'wp24_delete_expired_transients');

Этот код использует стандартную функцию delete_transient для корректного удаления transient из базы и кэшей.

Используем WP-Cron для регулярной очистки transient

Для автоматической очистки старых transient можно настроить задачу WP-Cron, чтобы функция запускалась, например, ежедневно.

function wp24_setup_transient_cleanup_cron() {
    if (!wp_next_scheduled('wp24_daily_transient_cleanup')) {
        wp_schedule_event(time(), 'daily', 'wp24_daily_transient_cleanup');
    }
}
add_action('wp', 'wp24_setup_transient_cleanup_cron');

add_action('wp24_daily_transient_cleanup', 'wp24_delete_expired_transients');

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

Полезные плагины для работы с transient

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

  • Clearfy Pro — оптимизация и очистка базы, в том числе transient;
  • WPRemark — для управления кэшом и оптимизации запросов.

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

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

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

  • Всегда задавайте разумное время жизни transient (expiration). Не делайте его слишком длинным без необходимости.
  • Регулярно проверяйте базу данных на наличие устаревших transient и удаляйте их.
  • Используйте WP-Cron или системные cron задачи для автоматической очистки.
  • Если transient создаются сторонними плагинами, убедитесь, что они корректно их удаляют.
  • Для сложных сайтов рассмотрите внедрение внешнего кэша (Redis, Memcached) вместо transient в базе.
Как отключить автоматические обновления в WordPress: практические решения и примеры кода
14.02.2026
Как использовать handy код для удаления старых метаданных в WordPress
09.01.2026
Как избежать ошибок WooCommerce при массовом изменении цен продуктов
18.05.2026
Как добавить автоматическое удаление старых transient-данных в WordPress
22.01.2026
Как избежать проблем с кэшированием в WordPress
13.12.2025