Как автоматически удалять зависшие transienty в WordPress

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

Что такое transienty и почему они зависают

Transient API WordPress позволяет сохранять временные данные с определённым сроком действия. Например, кэш запросов к внешним сервисам, расчёты, результаты DB-запросов. После истечения срока transient должен удаляться автоматически с помощью WP-Cron. Но если WP-Cron отключён, настроен неправильно или сайт не получает достаточного трафика, удаление может не сработать.

Также transienty могут зависать из-за ошибок плагинов, некорректных запросов или сбойных процессов очистки. Зависшие transienty занимают место в таблице wp_options, замедляют выборки и увеличивают время отклика сайта.

Поэтому важно регулярно мониторить и очищать базу от таких данных.

Как найти зависшие transienty в базе данных

Все transient-ключи хранятся в таблице wp_options и имеют префиксы _transient_ и _transient_timeout_. Для поиска зависших transient можно использовать SQL-запросы к базе.

Пример запроса для поиска устаревших transient:

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

Этот запрос возвращает все transienty, у которых время истечения уже прошло, но они ещё не удалены.

Для поиска самих значений transient по найденным ключам:

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

Можно увидеть их количество и оценить масштабы проблемы.

Автоматическое удаление зависших transient с помощью WPReg_cron

Чтобы избежать накопления «мусорных» transient, можно настроить периодическую очистку с помощью WP-Cron. Если стандартный WP-Cron не работает надёжно, рекомендуем использовать плагин WPReg_cron для контроля и запуска задач в заданное время.

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

function wpreg_remove_expired_transients() {
    global $wpdb;
    $time = time();
    $expired = $wpdb->get_col(
        $wpdb->prepare(
            "SELECT option_name FROM $wpdb->options
            WHERE option_name LIKE '_transient_timeout_%'
            AND option_value < %d",
            $time
        )
    );
    if ( empty($expired) ) {
        return;
    }

    foreach ( $expired as $timeout_key ) {
        // Получаем ключ transient без префикса _transient_timeout_
        $transient_key = str_replace('_transient_timeout_', '', $timeout_key);
        // Удаляем transient и его время жизни
        delete_transient($transient_key);
    }
}

// Регистрируем функцию в хук WP-Cron
add_action('wpreg_cron_cleanup_transients', 'wpreg_remove_expired_transients');

// Пример добавления расписания при инициализации плагина или темы
if ( ! wp_next_scheduled('wpreg_cron_cleanup_transients') ) {
    wp_schedule_event(time(), 'hourly', 'wpreg_cron_cleanup_transients');
}

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

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

Если хотите обойтись без кода, есть готовые решения:

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

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

Как проверить, что transient очищаются корректно

После настройки автоматической очистки важно проверить, что transient действительно удаляются и база не растёт:

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

Если transientы не удаляются, проверьте корректность расписания WP-Cron и отключите плагины, которые могут конфликтовать с очисткой.

Заключение

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

Для удобства и надёжности рекомендую использовать WPReg_cron, а также контролировать состояние базы через SQL-запросы и плагины типа Clearfy Pro.

Как создать уникальный Meta Box в WordPress с примером кода
22.12.2025
Как удалить зависшие варианты товаров WooCommerce по атрибуту
30.04.2026
Как использовать хук и фильтр post_status в WordPress для управления статусами записей
05.03.2026
Как создать и использовать виджеты в WordPress без плагинов
09.02.2026
Как добавить собственные типы постов в WordPress с примерами кода
09.01.2026