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

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

Что такое transient в WordPress и зачем его удалять

Transient — это временный кэш, который хранится в базе данных или в объектном кэше, например Redis или Memcached. Он имеет время жизни (TTL), после которого автоматически удаляется. Но бывают ситуации, когда:

  • Данные устарели, но TTL ещё не вышел.
  • Произошли изменения, и нужно сбросить кэш вручную.
  • Появились ошибки из-за повреждённых или некорректных данных в transient.

В таких случаях нужно уметь удалять transient, чтобы WordPress заново получил актуальные данные.

Удаление transient через административную панель и плагины

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

  • Clearfy Pro — содержит инструменты для очистки базы данных, в том числе transient. Позволяет удалить все или выборочные transient.
  • Transient Manager — бесплатный плагин для просмотра, удаления и поиска transient в базе.

Использование плагинов удобно, но не всегда эффективно при массовой очистке или автоматизации. Для этого лучше использовать код.

Программное удаление transient в WordPress

Удаление конкретного transient

Если вы знаете имя transient, его легко удалить с помощью функции delete_transient. Например, для transient с именем wpteam_cache_data:

function wpteam_delete_specific_transient() {
    delete_transient('wpteam_cache_data');
}

Вызывайте эту функцию в нужном месте вашего плагина или темы, когда нужно сбросить кэш.

Удаление опкэша объекта transient

Если transient хранится в объектном кэше, иногда полезно вызвать сброс кэша и там, особенно при использовании Redis или Memcached:

function wpteam_delete_transient_with_cache($transient_name) {
    global $wpdb;
    delete_transient($transient_name);
    // Очистка объекта кэша
    wp_cache_delete('_transient_' . $transient_name, 'options');
    wp_cache_delete('_transient_timeout_' . $transient_name, 'options');
}

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

Если требуется удалить все transient из базы, можно использовать прямой SQL-запрос. Будьте осторожны и обязательно сделайте резервную копию базы.

function wpteam_delete_all_transients() {
    global $wpdb;
    $transient_name = '_transient_%';
    $transient_timeout = '_transient_timeout_%';

    $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name LIKE '{$transient_name}'" );
    $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name LIKE '{$transient_timeout}'" );
}

Этот код удалит все transient и таймауты к ним из таблицы опций.

Автоматическое удаление устаревших transient с WP-Cron

Иногда полезно регулярно очищать transient, чтобы не засорять базу. Для этого можно создать задачу на WP-Cron.

function wpteam_schedule_transient_cleanup() {
    if (!wp_next_scheduled('wpteam_cleanup_transients_hook')) {
        wp_schedule_event(time(), 'daily', 'wpteam_cleanup_transients_hook');
    }
}
add_action('wp', 'wpteam_schedule_transient_cleanup');

function wpteam_cleanup_transients() {
    wpteam_delete_all_transients();
}
add_action('wpteam_cleanup_transients_hook', 'wpteam_cleanup_transients');

Так вы будете автоматически удалять все transient раз в сутки.

Особенности работы с persistent object cache и transient

Если на сайте настроен persistent object cache (Redis, Memcached), transient хранятся в кэше, а не в базе. В этом случае удаление через базу не всегда эффективно. Рекомендуется использовать функции delete_transient и wp_cache_delete, чтобы удалить transient из кэша.

Проверить наличие persistent cache можно через плагин Clearfy Pro, который позволяет управлять кэшем и transient.

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

Рассмотрим пример, где мы кэшируем запрос к внешнему API и умеем сбрасывать кэш по кнопке в админке:

function wpteam_get_api_data() {
    $cache_key = 'wpteam_api_data';
    $data = get_transient($cache_key);

    if ($data === false) {
        // Запрос к API
        $response = wp_remote_get('https://api.example.com/data');
        if (is_wp_error($response)) {
            return [];
        }
        $data = json_decode(wp_remote_retrieve_body($response), true);
        // Кэшируем на 12 часов
        set_transient($cache_key, $data, 12 * HOUR_IN_SECONDS);
    }
    return $data;
}

// Функция для удаления transient по запросу
function wpteam_clear_api_cache() {
    if (isset($_GET['clear_api_cache']) && current_user_can('manage_options')) {
        delete_transient('wpteam_api_data');
        wp_safe_redirect(remove_query_arg('clear_api_cache'));
        exit;
    }
}
add_action('admin_init', 'wpteam_clear_api_cache');

Такой подход позволяет минимизировать количество запросов к API и быстро сбрасывать кэш при необходимости.

Резюме и рекомендации

Удаление transient — важный инструмент для разработки и поддержки WordPress-сайтов. Знание методов удаления transient помогает решать проблемы с устаревшими данными и оптимизировать работу сайта. Используйте как готовые плагины, так и программные методы для гибкости и контроля.

Для продвинутых пользователей рекомендуем ознакомиться с плагином Clearfy Pro — он значительно упрощает управление transient и кэшами.

Как удалить кэш transient в WordPress для решения проблем с устаревшими данными
11.02.2026
Как создать собственный шорткод в WordPress для удобного вывода контента
02.11.2025
Динамическая фильтрация таксономий в WordPress: решение и примеры кода
10.12.2025
Как использовать хук pre_get_posts для сложной фильтрации в WordPress
22.01.2026
Как использовать WPRemark для массового комментирования и управления отзывами в WordPress
15.01.2026