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

|

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

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

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

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

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

Автоматизация удаления старого transient с помощью WP-Cron

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

Пример кода автоматического удаления transient

function wpdetect_delete_expired_transients() {
    global $wpdb;

    // Удаляем все expired transient из базы данных
    $time = current_time('timestamp');
    $transient_name_like = '_transient_timeout_%';

    // Получаем все ключи с таймаутами
    $expired_transients = $wpdb->get_col( $wpdb->prepare(
        "SELECT option_name FROM $wpdb->options WHERE option_name LIKE %s AND option_value < %d",
        $transient_name_like,
        $time
    ) );

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

            // Удаляем transient и его таймаут
            delete_transient( $transient_key );
        }
    }
}

// Регистрация события WP-Cron
function wpdetect_schedule_transient_cleanup() {
    if ( ! wp_next_scheduled( 'wpdetect_daily_transient_cleanup' ) ) {
        wp_schedule_event( time(), 'daily', 'wpdetect_daily_transient_cleanup' );
    }
}
add_action( 'wp', 'wpdetect_schedule_transient_cleanup' );

// Хук для запуска очистки
add_action( 'wpdetect_daily_transient_cleanup', 'wpdetect_delete_expired_transients' );

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

Полезные плагины для управления transient в WordPress

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

1. Transients Manager

Простой и бесплатный плагин, который позволяет просматривать, удалять и очищать transient через админ-панель WordPress. Очень полезен для диагностики и ручного управления.

2. Clearfy Pro

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

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

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

Расширенный пример: удаление старых transient с фильтрацией по префиксу

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

function wpdetect_delete_expired_transients_by_prefix( $prefix = '' ) {
    global $wpdb;

    $time = current_time('timestamp');
    $like = '_transient_timeout_' . $prefix . '%';

    $expired_transients = $wpdb->get_col( $wpdb->prepare(
        "SELECT option_name FROM $wpdb->options WHERE option_name LIKE %s AND option_value < %d",
        $like,
        $time
    ) );

    if ( ! empty( $expired_transients ) ) {
        foreach ( $expired_transients as $timeout_key ) {
            $transient_key = str_replace( '_transient_timeout_', '', $timeout_key );
            delete_transient( $transient_key );
        }
    }
}

// Пример использования: удаляем только transient с префиксом 'wpdetect_'
wpdetect_delete_expired_transients_by_prefix( 'wpdetect_' );

Такой подход позволяет контролировать удаление transient с высокой точностью и не затрагивать данные других плагинов.

Как удалить неиспользуемые таблицы в базе данных WordPress
07.11.2025
Как использовать WP REST API для автоматизации управления постами в WordPress
27.03.2026
Автоматизация резервного копирования WordPress с помощью плагинов и кода
02.12.2025
Автоматическое отключение неиспользуемых виджетов в WordPress: практическое решение
16.01.2026
Как автоматизировать удаление неиспользуемых attachment файлов в WordPress
11.04.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее