Transient API в WordPress используется для временного хранения данных с целью оптимизации скорости работы сайта. Однако со временем в базе данных накапливается множество устаревших transient, что может замедлить работу сайта и увеличить нагрузку на сервер. В этой статье разберём, как безопасно и эффективно удалить старые transient в WordPress без использования плагинов.
Что такое transient и зачем их удалять? Оптимизация базы данных WordPress
Transient — это временные данные, которые сохраняются в базе данных WordPress с указанием времени жизни (TTL). После истечения этого времени transient считается устаревшим, но не удаляется автоматически. Со временем база данных накапливает множество таких записей, что приводит к:
- Увеличению размера таблицы
wp_options; - Снижению производительности запросов к базе данных;
- Повышенной нагрузке на сервер.
Удаление старых transient позволяет поддерживать базу данных в чистоте и ускорять работу сайта без необходимости установки дополнительных плагинов.
Как найти и удалить устаревшие transient с помощью SQL-запроса
Transientы хранятся в таблице wp_options с опциями, названия которых начинаются с _transient_ или _transient_timeout_. Для удаления устаревших transient нужно очистить записи с просроченным временем жизни.
Для начала рекомендуем сделать резервную копию базы данных.
Пример SQL-запроса для удаления устаревших transient:
DELETE FROM wp_options WHERE option_name LIKE '_transient_%' AND option_name LIKE '%timeout' AND option_value < UNIX_TIMESTAMP();Этот запрос удалит записи с временами истечения, которые уже прошли. Однако transientы состоят из двух записей: сам ключ и время его жизни. Чтобы удалить полностью весь устаревший transient, нужно удалить обе записи.
Чтобы удалить все устаревшие transient полностью, можно использовать следующий запрос:
DELETE o1, o2 FROM wp_options o1 INNER JOIN wp_options o2 ON REPLACE(o1.option_name, '_transient_timeout_', '_transient_') = o2.option_name WHERE o1.option_name LIKE '_transient_timeout_%' AND o1.option_value < UNIX_TIMESTAMP();Объяснение:
- В таблице
wp_optionsесть записи с именами_transient_timeout_ключи_transient_ключ. - Мы ищем все timeout, срок которых истек (
option_value < UNIX_TIMESTAMP()). - Удаляем одновременно записи с timeout и соответствующий transient.
Удаление устаревших transient через PHP — пример функции для wpdesk
Если вы хотите автоматизировать процесс удаления старых transient в вашем коде, можно добавить в файл functions.php темы или создать небольшой плагин с такой функцией:
function wpdesk_delete_expired_transients() {
global $wpdb;
// Получаем все timeout, срок действия которых истёк
$expired_timeouts = $wpdb->get_col(
"SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE '_transient_timeout_%' AND option_value < UNIX_TIMESTAMP()"
);
if ( empty( $expired_timeouts ) ) {
return 0; // Нет устаревших transient
}
$count = 0;
foreach ( $expired_timeouts as $timeout_name ) {
// Формируем имя transient без _timeout_
$transient_name = str_replace( '_transient_timeout_', '_transient_', $timeout_name );
// Удаляем запись timeout
$wpdb->delete( $wpdb->options, [ 'option_name' => $timeout_name ] );
// Удаляем сам transient
$wpdb->delete( $wpdb->options, [ 'option_name' => $transient_name ] );
$count++;
}
return $count;
}
// Пример вызова и вывода результата
$deleted = wpdesk_delete_expired_transients();
echo "Удалено устаревших transient: " . $deleted;
Данная функция перебирает все устаревшие transient и удаляет их из базы данных. Вы можете запустить её вручную или добавить в cron-задачу для регулярной очистки.
Практические советы по работе с transient и оптимизации скорости сайта
Используйте WPGPT и Clearfy Pro для контроля transient
Для автоматизации управления transient и других оптимизаций можно использовать плагины с функциями очистки и улучшения производительности. Например, WPGPT помогает анализировать данные сайта, а Clearfy Pro содержит инструменты для оптимизации базы данных и очистки устаревших transient.
Регулярная очистка и мониторинг transient в WordPress
Рекомендуется планировать регулярную проверку и удаление устаревших transient, чтобы они не накапливались. Это особенно важно на сайтах с большим трафиком и частым использованием transient для кэширования данных.
Можно настроить WP-Cron для автоматического вызова функции очистки:
if ( ! wp_next_scheduled( 'wpdesk_delete_expired_transients_hook' ) ) {
wp_schedule_event( time(), 'daily', 'wpdesk_delete_expired_transients_hook' );
}
add_action( 'wpdesk_delete_expired_transients_hook', 'wpdesk_delete_expired_transients' );
Так вы будете избавляться от устаревших записей ежедневно без вмешательства.
Оптимизация таблицы wp_options после удаления transient
После удаления большого количества записей transient желательно выполнить оптимизацию таблицы wp_options для освобождения места и повышения производительности.
Для этого можно использовать SQL-команду:
OPTIMIZE TABLE wp_options;Или использовать инструменты управления базой данных, например phpMyAdmin.
Заключение
Удаление устаревших transient — важный этап оптимизации WordPress-сайта, который помогает поддерживать базу данных в порядке и улучшать скорость загрузки страниц. Использование SQL-запросов и PHP-функций позволяет справиться с задачей без установки дополнительных плагинов. Для удобства и автоматизации можно дополнительно использовать проверенные решения от WPShop.