Transienty в WordPress — это временные данные, которые используются для кэширования результатов различных запросов и операций. Они помогают ускорить загрузку страниц и снизить нагрузку на сервер, но со временем некоторые transienty могут устаревать и оставаться в базе данных, занимая место и замедляя работу сайта. В этой статье разберёмся, как эффективно удалять неактуальные transienty в WordPress, используя как готовые плагины, так и собственные функции.
Что такое transienty и зачем их удалять? Обзор ключевых понятий
Transienty — это механизм временного хранения данных в базе WordPress с заданным сроком жизни. Обычно они используются для кэширования результатов API-запросов, сложных вычислений или частых запросов к базе данных. Например, если плагин получает данные с внешнего сервиса, он может сохранять их в transient, чтобы не запрашивать их каждый раз.
Однако transienty с истёкшим сроком действия не всегда автоматически удаляются из базы данных. Это приводит к накоплению «мусора» и увеличению размера таблиц базы данных, что негативно сказывается на производительности сайта и усложняет резервное копирование.
Поэтому регулярная очистка устаревших transientов — важный элемент поддержания здоровья WordPress.
Как посмотреть и управлять transienty вручную через базу данных
Transienty хранятся в таблице wp_options (префикс может отличаться). В базе они представлены как пары ключ-значение, где ключи начинаются с _transient_ или _transient_timeout_.
Для просмотра всех transient записей можно выполнить SQL-запрос:
SELECT option_name, option_value FROM wp_options WHERE option_name LIKE '_transient_%';
Чтобы удалить устаревшие transient, нужно удалить записи с ключами _transient_ и соответствующие _transient_timeout_, у которых время истекло. Например:
DELETE FROM wp_options WHERE option_name LIKE '_transient_%' AND option_name IN (
SELECT option_name FROM wp_options
WHERE option_name LIKE '_transient_timeout_%' AND option_value < UNIX_TIMESTAMP()
);
Однако такой запрос может быть сложным и не всегда удобным для регулярного использования.
Автоматизация удаления устаревших transient с помощью PHP-функций в WordPress
Вы можете добавить в файл functions.php вашей темы или в собственный плагин функцию, которая будет удалять все просроченные transienty. Пример функции для wpset.ru:
function wpset_delete_expired_transients() {
global $wpdb;
$time = time();
// Получаем все transient_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 ) ) {
foreach ( $expired as $timeout_key ) {
// Формируем ключ transient по timeout ключу
$transient_key = str_replace( '_transient_timeout_', '_transient_', $timeout_key );
// Удаляем transient и timeout
delete_option( $timeout_key );
delete_option( $transient_key );
}
}
}
// Можно запускать вручную или через cron
// wpset_delete_expired_transients();
Эту функцию можно запускать периодически через WP-Cron или вручную для очистки базы.
Как настроить WP-Cron для регулярной очистки transient
Добавьте в functions.php следующий код для планирования задачи:
if ( ! wp_next_scheduled( 'wpset_cleanup_transients' ) ) {
wp_schedule_event( time(), 'daily', 'wpset_cleanup_transients' );
}
add_action( 'wpset_cleanup_transients', 'wpset_delete_expired_transients' );
Это позволит автоматически удалять устаревшие transient каждый день.
Использование плагинов для управления transient в WordPress
Если вы предпочитаете готовые решения, обратите внимание на следующие плагины:
- Transient Manager — позволяет просматривать, удалять и управлять transient через админку.
- Clearfy Pro — включает инструменты для оптимизации базы и управления transient, совмещая очистку с другими функциями оптимизации.
- WP-Optimize — автоматизирует очистку transient вместе с другими оптимизациями базы данных.
В частности, Clearfy Pro можно приобрести с официального сайта, где реализованы удобные инструменты для удаления временных данных и оптимизации работы сайта.
Практические советы по работе с transient для разработчиков и администраторов
1. Минимизируйте время жизни transient. Чем меньше TTL (time to live), тем реже устаревшие данные будут накапливаться.
2. Проверяйте, где и зачем создаются transienty. Избегайте создания transient для редко используемых данных.
3. Регулярно очищайте базу — с помощью кода или плагинов, чтобы поддерживать производительность.
4. Используйте объектный кэш (например, Redis) вместе с transienty для ускорения доступа к данным.
Пример создания transient с правильным временем жизни
function wpset_get_expensive_data() {
$cache_key = 'wpset_expensive_data';
$data = get_transient( $cache_key );
if ( false === $data ) {
// Дорогая операция
$data = 'Результат долгого запроса или вычисления';
// Сохраняем transient на 1 час
set_transient( $cache_key, $data, HOUR_IN_SECONDS );
}
return $data;
}
Выводы и рекомендации по удалению transient в WordPress
Transienty — мощный инструмент кеширования, но при неправильном использовании они могут привести к засорению базы данных и замедлению сайта. Регулярная очистка неактуальных transient с помощью кода или плагинов, а также правильное использование TTL помогут поддерживать сайт быстрым и стабильным.
Для удобства и безопасности рекомендуем использовать проверенные плагины, например, Clearfy Pro, а также внедрять автоматическую очистку через WP-Cron с помощью приведённых функций.