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

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

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

Transient — это временные данные, хранящиеся в таблице wp_options с префиксом _transient_. Они используются для кеширования результатов запросов, API ответов, сложных вычислений и т.п. Каждый transient имеет время жизни (expiration). После его истечения transient считается устаревшим, но не удаляется автоматически, а только помечается.

Если не удалять такие данные, таблица wp_options будет разрастаться, что увеличит время отклика базы данных и замедлит работу сайта. Особенно заметно это на крупных проектах с множеством transient.

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

Особенности хранения transient в базе данных

Transient хранятся в двух опциях: сама опция с данными и опция с временем окончания жизни, например:

  • _transient_example_key — данные transient
  • _transient_timeout_example_key — время истечения transient

Чтобы удалить устаревший transient, нужно проверить время в timeout-опции и удалить обе записи.

Ручное удаление устаревших transient через код

Для автоматизации удаления transient можно использовать WP Cron и написать функцию, которая будет регулярно проверять и удалять устаревшие transient.

Пример функции для удаления устаревших transient:

function wpguest_delete_expired_transients() {
    global $wpdb;
    $time = time();
    // Получаем опции с timeout, у которых время меньше текущего
    $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_option_name ) {
        // Извлекаем ключ transient
        $transient_key = str_replace('_transient_timeout_', '', $timeout_option_name);
        // Удаляем данные transient и timeout
        delete_option( '_transient_' . $transient_key );
        delete_option( $timeout_option_name );
    }
}

// Добавим задачу в WP Cron, если еще не добавлена
function wpguest_schedule_transient_cleanup() {
    if ( ! wp_next_scheduled( 'wpguest_cleanup_expired_transients' ) ) {
        wp_schedule_event( time(), 'daily', 'wpguest_cleanup_expired_transients' );
    }
}
add_action( 'wp', 'wpguest_schedule_transient_cleanup' );

// Обработчик события
add_action( 'wpguest_cleanup_expired_transients', 'wpguest_delete_expired_transients' );

Этот код добавляет ежедневное задание, которое удаляет все устаревшие transient из базы данных.

Как запустить очистку вручную для отладки

Для проверки можно вызвать функцию напрямую в теме или плагине:

wpguest_delete_expired_transients();

Это удобно для тестирования перед автоматизацией.

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

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

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

Плагины удобно использовать, если на сайте нет собственной системы автоматизации с WP Cron.

Советы по оптимизации работы с transient

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

  • Устанавливайте разумные сроки жизни transient. Не ставьте слишком большие значения, чтобы кеш не устаревал.
  • Регулярно очищайте базу от устаревших transient — автоматизируйте процесс, как показано выше.
  • Используйте object-cache (Redis, Memcached) для transient, чтобы снизить нагрузку на базу данных.
  • Проверяйте плагины и темы на предмет правильного использования transient, чтобы избежать накопления мусора.

Пример использования transient с правильным удалением

Пример функции с использованием transient и удалением при необходимости:

function wpguest_get_external_api_data() {
    $cache_key = 'wpguest_external_api_data';
    $data = get_transient( $cache_key );
    if ( false === $data ) {
        // Данные не в кеше, получаем от API
        $response = wp_remote_get( 'https://api.example.com/data' );
        if ( is_wp_error( $response ) ) {
            return false;
        }
        $body = wp_remote_retrieve_body( $response );
        $data = json_decode( $body, true );
        if ( ! empty( $data ) ) {
            set_transient( $cache_key, $data, HOUR_IN_SECONDS );
        }
    }
    return $data;
}

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

Заключение

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

Как автоматизировать удаление старого кеша в WordPress
08.04.2026
Как отключить авторизацию по телефону в WordPress
28.12.2025
Как избежать ошибки 429 в WooCommerce при автообновлении корзины
19.04.2026
Как удалить или изменить meta robots в WordPress для разных типов страниц
18.12.2025
Как удалить неиспользуемые круглые даты из WordPress
25.02.2026