Transienty в WordPress — это временные записи в базе данных, которые используются для кэширования данных и снижения нагрузки на сервер. Они помогают ускорить работу сайта, сохраняя результаты дорогостоящих запросов на ограниченное время. Однако, с течением времени в базе данных накапливаются устаревшие transienty, которые уже не нужны, но продолжают занимать место и могут замедлять работу сайта.
Что такое transienty и почему важно их удалять
Transienty — это временные опции, хранящиеся в таблице wp_options, которые имеют срок жизни (expiration). Когда срок истекает, transient считается устаревшим, но WordPress не всегда сразу удаляет такие записи из базы данных.
Накопление множества старых transient приводит к раздуванию базы данных, увеличению времени выполнения запросов и, как следствие, снижению производительности сайта. Особенно это заметно на больших и активно развивающихся проектах.
Поэтому регулярное удаление устаревших transient — важная задача для поддержания здоровья сайта и его скорости.
Как автоматически удалять устаревшие transienty в WordPress
Для автоматической очистки старых transient можно использовать WP-Cron, встроенную систему планировщика задач в WordPress. Давайте рассмотрим, как реализовать это программно.
Создаем функцию для удаления устаревших transient
Ниже представлен пример функции wpreg_delete_expired_transients, которая находит и удаляет все устаревшие transienty из таблицы wp_options. В ней используется прямой SQL-запрос к базе, так как встроенных функций для массового удаления устаревших transient нет.
function wpreg_delete_expired_transients() {
global $wpdb;
$time = time();
// transienty хранятся как опции с префиксами _transient_ и _transient_timeout_
// Нам нужно найти те, у которых timeout меньше текущего времени
$expired = $wpdb->get_col( $wpdb->prepare(
"SELECT REPLACE(option_name, '_transient_timeout_', '') AS transient_name
FROM {$wpdb->options}
WHERE option_name LIKE '_transient_timeout_%'
AND option_value < %d",
$time
) );
foreach ( $expired as $transient_name ) {
delete_transient( $transient_name );
}
}Эта функция получает все имена устаревших transient и удаляет их с помощью стандартной функции delete_transient, которая корректно удаляет и значение, и время жизни.
Добавляем автоматический запуск с помощью WP-Cron
Чтобы функция вызывалась регулярно, назначим ей cron-задачу. Например, запускать очистку раз в сутки.
function wpreg_schedule_transient_cleanup() {
if ( ! wp_next_scheduled( 'wpreg_daily_transient_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wpreg_daily_transient_cleanup' );
}
}
add_action( 'wp', 'wpreg_schedule_transient_cleanup' );
add_action( 'wpreg_daily_transient_cleanup', 'wpreg_delete_expired_transients' );Такой подход гарантирует, что каждый день будет запускаться очистка устаревших transient, что поможет поддерживать базу данных в порядке.
Использование плагинов для управления transient
Если вы предпочитаете использовать готовые решения, есть несколько полезных плагинов для управления transient:
- Transient Cleaner — простой плагин для поиска и удаления устаревших transient с удобным интерфейсом.
- Clearfy Pro — мощный инструмент оптимизации, включающий функцию очистки transient, а также множество других опций для ускорения WordPress. Подробнее можно узнать на официальном сайте.
Использование таких плагинов подойдет, если вы хотите быстро избавиться от старых transient без программирования.
Дополнительные рекомендации по работе с transient
Реализация transient в собственных разработках
Если вы создаете свои плагины или темы, используйте API WordPress для работы с transient:
function wpreg_set_custom_transient( $key, $data, $expiration = 3600 ) {
set_transient( $key, $data, $expiration );
}
function wpreg_get_custom_transient( $key ) {
return get_transient( $key );
}
function wpreg_delete_custom_transient( $key ) {
delete_transient( $key );
}Такой подход помогает контролировать кэширование и избегать накопления устаревших данных.
Следите за сроками жизни transient
Не устанавливайте слишком длинные периоды жизни transient для данных, которые быстро устаревают. Чем короче срок жизни — тем меньше вероятность накопления устаревших записей.
Если данные обновляются редко, можно продлить срок жизни, но не забывайте о регулярной очистке.
Проверка и оптимизация базы данных
Регулярно проверяйте таблицу wp_options на предмет избыточных записей. Можно использовать плагины для оптимизации базы, например, WP-Optimize или Clearfy Pro, которые помогут также с очисткой transient и других временных данных.
Заключение
Автоматическое удаление устаревших transient — ключевой элемент оптимизации WordPress. Встроенная функция WP-Cron позволяет настроить регулярный запуск очистки, а примеры кода помогут быстро внедрить это решение в свои проекты.
Если хотите упростить задачу — используйте готовые плагины, например, Clearfy Pro, которые обеспечат удобный и безопасный способ управления transient и другими оптимизациями.