В процессе работы с WordPress иногда возникает необходимость очистить временные черты (transients), которые используются для временного хранения данных в базе данных. Они помогают ускорить загрузку сайта, но со временем могут накапливаться и создавать нагрузку на базу данных, особенно если не очищаются автоматически. В этой статье мы подробно разберем, как программно удалить устаревшие или все временные черты в WordPress, чтобы улучшить производительность сайта.
Что такое временные черты (transients) в WordPress и зачем их удалять
Transient API — это встроенный механизм кэширования в WordPress, который позволяет сохранять данные с ограниченным временем жизни. Это могут быть результаты запросов к внешним API, тяжелые вычисления или промежуточные данные. Временные черты хранятся в таблице wp_options с префиксами _transient_ и _transient_timeout_.
Проблема возникает, когда черты не удаляются после истечения срока действия, особенно если используются плагины или кастомный код, которые не всегда корректно очищают их. Это может привести к росту таблицы опций, замедлению запросов и ухудшению работы сайта.
Регулярная очистка временных черт — хорошая практика для поддержки чистоты базы данных и оптимизации скорости.
Удаление всех временных черт с помощью WP CLI
Если у вас есть доступ к командной строке сервера с установленным WP CLI, самый быстрый способ — выполнить команду:
wp transient delete --allОна удалит все временные черты, включая те, у которых срок действия не истек. Это полезно для моментальной очистки, например, после обновления плагинов или темы.
Однако не всегда есть доступ к WP CLI, а также иногда требуется более тонкое управление.
Программное удаление устаревших временных черт через код
Чтобы удалить только просроченные временные черты программно, можно использовать следующий подход. WordPress не предоставляет прямой функции для этого, поэтому придется искать их вручную в базе данных.
Пример функции для удаления всех просроченных временных черт:
function wptests_delete_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_key = str_replace('_transient_timeout_', '', $timeout_key);
// Удаляем значение и таймаут
delete_transient($transient_key);
}
}Эту функцию можно запускать по крону или вручную для очистки базы от устаревших временных черт. Она не затронет активные кэши.
Удаление всех временных черт программно (включая активные)
Если нужно полностью очистить все временные черты без исключений, можно использовать такой код:
function wptests_delete_all_transients() {
global $wpdb;
// Получаем все ключи временных черт
$transients = $wpdb->get_col(
"SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE '_transient_%'"
);
if ( empty($transients) ) {
return;
}
foreach ( $transients as $transient ) {
if ( strpos($transient, '_transient_timeout_') === 0 ) {
// Удаляем таймаут
$key = str_replace('_transient_timeout_', '', $transient);
delete_transient($key);
} elseif ( strpos($transient, '_transient_') === 0 ) {
// Удаляем сам transient
$key = str_replace('_transient_', '', $transient);
delete_transient($key);
}
}
}Эта функция удалит абсолютно все временные черты, что может вызвать кратковременное падение производительности, если кэшируемые данные важны для сайта. Используйте с осторожностью.
Пример автоматической очистки временных черт с помощью WP Cron
Для регулярной очистки устаревших временных черт желательно настроить задачу cron. Вот пример, как это сделать:
if ( ! wp_next_scheduled( 'wptests_cron_delete_expired_transients' ) ) {
wp_schedule_event( time(), 'daily', 'wptests_cron_delete_expired_transients' );
}
add_action( 'wptests_cron_delete_expired_transients', 'wptests_delete_expired_transients' );Этот код добавляет ежедневное событие, которое будет вызывать функцию wptests_delete_expired_transients для очистки устаревших временных черт.
Использование плагинов для управления временными чертами
Если не хочется писать код, можно воспользоваться плагинами. Вот несколько полезных решений:
- Transient Manager — позволяет просматривать и удалять временные черты через админку.
- Clearfy Pro — комплексный плагин для оптимизации сайта, включая очистку кэшей и временных черт. Подробнее на wpshop.ru.
- WP Rocket — плагин кэширования с функцией очистки временных черт вместе с другими кэшами.
Плагины удобны, если нужно быстро и без риска повредить сайт очистить кэш.
Рекомендации по работе с временными чертами
Для эффективного использования transient API и избежания накопления мусора:
- Всегда задавайте срок действия временным чертам — не ставьте время жизни в бесконечность.
- Регулярно очищайте просроченные черты, например, через WP Cron или WP CLI.
- Проверяйте сторонние плагины и темы на корректное использование transient API.
- Избегайте создания временных черт с одинаковыми ключами, чтобы не создавать дубликаты в базе.
Соблюдение этих рекомендаций обеспечит стабильную работу и высокую производительность вашего сайта.