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

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

Что такое transient-опции и почему их нужно чистить

Transient — это временная опция с ограниченным сроком действия, которая хранится в таблице опций WordPress и автоматически удаляется после истечения времени жизни. Но иногда transientы не удаляются из-за:

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

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

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

Для диагностики можно выполнить SQL-запрос напрямую в базе данных (например, через phpMyAdmin):

SELECT option_name, option_value, autoload FROM wp_options WHERE option_name LIKE '%_transient_%';

Обратите внимание, что transient-опции бывают двух видов:

  • _transient_имя — собственно данные transient.
  • _transient_timeout_имя — время истечения (timestamp).

Если в базе много записей с истекшим временем (текущий time() больше значения в timeout), значит их нужно удалить.

Автоматическая очистка устаревших transient с помощью WPFAQ_clear_expired_transients()

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

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

    // Получаем все expired 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 = str_replace('_transient_timeout_', '', $timeout_key);
        // Удаляем transient и timeout
        delete_transient($transient);
    }
}

// Регистрируем событие в WP-Cron для запуска раз в сутки
if (!wp_next_scheduled('wpfaq_daily_clear_transients')) {
    wp_schedule_event(time(), 'daily', 'wpfaq_daily_clear_transients');
}
add_action('wpfaq_daily_clear_transients', 'wpfaq_clear_expired_transients');

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

Использование плагинов для управления transient

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

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

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

Дополнительные советы по работе с transient

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

  • Используйте функции WordPress для установки transient — set_transient(), get_transient(), delete_transient(), чтобы гарантировать корректное управление.
  • Не устанавливайте слишком длинные сроки хранения, если данные быстро устаревают.
  • Проверяйте работу WP-Cron, так как от него зависит удаление просроченных transient.
  • При большом трафике и нагрузке можно использовать внешние кеши, например Redis или Memcached, чтобы снизить использование transient в базе данных.

Заключение

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

Как избежать конфликтов между плагинами WordPress
04.01.2026
Как избежать проблемы выхода из аккаунта WordPress при использовании кеш-подключений
26.02.2026
WooCommerce: как использовать хуки для автоматизации изменений статуса заказа
03.07.2026
WooCommerce: как автоматически удалять товары без склада
26.05.2026
WooCommerce: автоматическое отключение неактивных методов оплаты
12.06.2026