Transient API в WordPress — это мощный инструмент для временного кэширования данных с целью повышения производительности сайта. Однако со временем накапливаются устаревшие или неиспользуемые transient'ы, которые могут замедлять работу сайта и занимать место в базе данных. В этой статье разберём, как эффективно находить и удалять такие transient'ы, а также автоматизировать этот процесс.
Что такое transient'ы и зачем их очищать
Transient'ы — это временные записи в базе данных, которые хранят кэшированные значения с указанием времени жизни. Они позволяют избежать повторных тяжёлых запросов, например, к внешним API или сложным SQL, за счёт хранения результата на ограниченный период.
Проблема возникает, если transient'ы не удаляются по окончании срока жизни или плагин, который их создавал, перестал работать. В итоге база данных загромождается, что может привести к:
- Увеличению размера таблиц базы данных;
- Замедлению запросов к базе;
- Ошибкам при чтении устаревших transient'ов;
- Общему снижению производительности сайта.
Удаление ненужных transient'ов — важный этап в техническом обслуживании WordPress.
Как найти неиспользуемые transient'ы в базе данных WordPress
Transient'ы хранятся в таблице wp_options (префикс может отличаться) с ключами вида _transient_{name} и _transient_timeout_{name}. Для поиска можно использовать SQL-запрос:
SELECT option_name, option_value FROM wp_options WHERE option_name LIKE '%_transient_%';Этот запрос покажет все transient'ы и их время жизни. Чтобы отфильтровать устаревшие, можно проверить поле option_name, содержащие _transient_timeout_, и сравнить их option_value (таймстамп) с текущим временем.
Для удобства можно использовать следующий запрос, который покажет все просроченные transient'ы:
SELECT option_name FROM wp_options WHERE option_name LIKE '_transient_timeout_%' AND option_value < UNIX_TIMESTAMP();Эти transient'ы уже просрочены и могут быть удалены.
Пример скрипта для поиска и удаления просроченных transient'ов
Для выполнения очистки можно использовать PHP-код, который выполнит удаление всех устаревших transient'ов:
function wpchecker_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 %s AND option_value < %d",
'_transient_timeout_%',
$time
)
);
if ( empty($expired) ) {
return;
}
foreach ( $expired as $timeout_key ) {
// Получаем имя transient'а
$transient_name = str_replace('_transient_timeout_', '', $timeout_key);
// Удаляем transient и его timeout
delete_transient( $transient_name );
}
}
// Запускаем функцию
wpchecker_delete_expired_transients();Этот код безопасно удалит все устаревшие transient'ы, используя стандартную функцию delete_transient, что гарантирует удаление и связанных данных.
Как автоматизировать очистку transient'ов с помощью WP-Cron
Для регулярной очистки transient'ов можно создать задачу через WP-Cron. Это позволит выполнять очистку, например, раз в сутки, без необходимости вмешательства вручную.
function wpchecker_schedule_transient_cleanup() {
if (! wp_next_scheduled('wpchecker_cleanup_expired_transients') ) {
wp_schedule_event(time(), 'daily', 'wpchecker_cleanup_expired_transients');
}
}
add_action('wp', 'wpchecker_schedule_transient_cleanup');
add_action('wpchecker_cleanup_expired_transients', 'wpchecker_delete_expired_transients');Этот код планирует ежедневное выполнение функции удаления устаревших transient'ов.
Использование плагинов для управления transient'ами
Если не хочется писать код, можно использовать готовые плагины для управления transient'ами и кэшем:
- Transient Manager — позволяет просматривать, удалять и очищать transient'ы через админку WordPress. Удобно для быстрой диагностики.
- Clearfy Pro — расширенный инструмент оптимизации, который включает управление transient'ами, а также очистку базы и другие полезные функции. Подробнее на wpshop.ru.
Использование таких плагинов подходит для пользователей, которые предпочитают графический интерфейс и дополнительные возможности оптимизации.
Практические советы для работы с transient'ами
При работе с transient'ами стоит учитывать несколько важных моментов:
- Всегда используйте функции WordPress (
set_transient,get_transient,delete_transient) для управления transient'ами, чтобы избежать конфликтов и ошибок. - Для критичных данных не устанавливайте слишком большой срок жизни transient'а, чтобы не отображать устаревшую информацию.
- Регулярно очищайте просроченные transient'ы, чтобы база не разрасталась.
- При разработке плагинов или тем учитывайте, что transient'ы нужно удалять при деактивации или удалении плагина.
Пример создания и удаления transient'а с префиксом wpchecker
function wpchecker_set_custom_transient($key, $value, $expiration = 3600) {
set_transient('wpchecker_' . $key, $value, $expiration);
}
function wpchecker_get_custom_transient($key) {
return get_transient('wpchecker_' . $key);
}
function wpchecker_delete_custom_transient($key) {
delete_transient('wpchecker_' . $key);
}Такой подход помогает избежать конфликтов с другими плагинами и облегчает поиск transient'ов, которые созданы вашим кодом.