Как автоматизировать удаление устаревших transient в WordPress

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

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

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

Накопление устаревших transient ведет к:

  • Увеличению размера базы данных;
  • Падению производительности SQL-запросов;
  • Общему замедлению сайта;
  • Потенциальным конфликтам кеша и устаревшим данным.

Поэтому важно регулярно чистить устаревшие transient, особенно на больших проектах.

Способы автоматического удаления устаревших transient

1. Использование WP-Cron для регулярной очистки

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

function wpguest_delete_expired_transients() {
    global $wpdb;
    $time = time();
    // transient expiration хранятся в опциях с префиксом '_transient_timeout_'
    $expired = $wpdb->get_col($wpdb->prepare(
        "SELECT option_name FROM $wpdb->options WHERE option_name LIKE '_transient_timeout_%' AND option_value < %d",
        $time
    ));

    foreach ($expired as $timeout_name) {
        $transient_name = str_replace('_transient_timeout_', '', $timeout_name);
        delete_transient($transient_name);
    }
}

add_action('wpguest_daily_cleanup', 'wpguest_delete_expired_transients');

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

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

2. Плагины для управления transient

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

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

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

Как диагностировать и выявлять проблемы с transient

Перед удалением transient полезно понять, какие из них занимают много места и долго не удаляются. Для этого можно использовать SQL-запросы или плагины типа Query Monitor и WP-Optimize.

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

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

Если таких записей много — это повод для регулярной очистки.

Обработка проблем с кешированием transient в плагинах

Иногда плагины неправильно используют transient — не удаляют их вручную после обновления данных. В таких случаях помогает добавление в код плагина или темы вызова delete_transient('название_транзиента') после обновления данных.

Оптимизация работы с transient — лучшие практики

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

  • Устанавливайте разумное время жизни transient — не слишком длинное, чтобы данные не устаревали;
  • Удаляйте transient вручную при изменении данных;
  • Регулярно очищайте устаревшие transient через WP-Cron или системный cron;
  • Используйте объектный кеш, если он доступен, например, Redis или Memcached — transient в них очищаются автоматически;
  • Проверяйте плагины на правильное использование transient.

Пример расширенной функции для wpguest: удаление transient по маске

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

function wpguest_delete_transients_by_prefix($prefix) {
    global $wpdb;
    $like = $wpdb->esc_like('_transient_' . $prefix) . '%';

    $transients = $wpdb->get_col($wpdb->prepare(
        "SELECT option_name FROM $wpdb->options WHERE option_name LIKE %s",
        $like
    ));

    foreach ($transients as $transient) {
        $transient_name = str_replace('_transient_', '', $transient);
        delete_transient($transient_name);
    }
}

// Пример вызова для удаления всех transient с префиксом 'wpguest_'
wpguest_delete_transients_by_prefix('wpguest_');

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

Выводы и рекомендации

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

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

Как автоматизировать управление отзывами в WordPress с помощью WPRemark
14.02.2026
Как исключить отображение товаров с нулевым запасом в WooCommerce с помощью кода
04.05.2026
Как автоматизировать удаление неиспользуемых вариативных изображений WooCommerce
12.05.2026
Удаление неиспользуемых виджетов в WordPress с помощью кода
27.01.2026
Как автоматизировать удаление старых ревизий записей в WordPress
12.03.2026