wpclean.ru wordpress WPClean.ru

Как удалить неиспользуемые transientы в WordPress

Transient API в WordPress — это мощный инструмент для временного кэширования данных в базе данных с автоматическим сроком жизни. Однако при неправильном использовании или при отсутствии очистки устаревшие transientы могут накапливаться, занимая место и замедляя работу сайта. В этой статье разберём, как найти и удалить неиспользуемые transientы, чтобы оптимизировать базу данных и повысить производительность WordPress.

Что такое transientы и почему их нужно удалять

Transientы — это записи в таблице wp_options, которые хранят данные с временным сроком действия. Они обычно используются для кэширования запросов API, результатов сложных SQL-запросов, данных, полученных из внешних сервисов, и т.п.

Каждый transient состоит из двух опций: собственно данных и времени их истечения (expiration). Когда срок жизни transientа истекает, WordPress автоматически должен его удалять, но на практике этого не всегда происходит. В результате в базе накапливаются «мёртвые» записи, которые не очищаются.

Накопление таких transientов может привести к увеличению размера таблицы wp_options, что негативно сказывается на скорости запросов к базе и, как следствие, на быстродействии сайта.

Как найти и удалить неиспользуемые transientы вручную через SQL

Для начала можно проверить, сколько transientов хранится в базе, с помощью следующего SQL-запроса:

SELECT option_name, option_value FROM wp_options WHERE option_name LIKE '_transient_%';

Здесь _transient_ — это префикс для активных transientов, а _transient_timeout_ — для опций с временем истечения.

Чтобы удалить все просроченные transientы, можно выполнить запрос:

DELETE FROM wp_options
WHERE option_name LIKE '_transient_%'
AND option_name NOT LIKE '_transient_timeout_%'
AND option_name IN (
    SELECT option_name FROM wp_options
    WHERE option_name LIKE '_transient_timeout_%'
    AND option_value < UNIX_TIMESTAMP()
);

Этот запрос удалит все данные transientы, срок жизни которых уже истёк.

Автоматизация очистки в коде: реализация функции wpclean_delete_expired_transients()

Для удобства можно создать функцию, которая будет удалять просроченные transientы автоматически. Ниже пример такой функции, которую можно добавить в файл functions.php вашей темы или в кастомный плагин:

function wpclean_delete_expired_transients() {
    global $wpdb;

    // Получаем все просроченные transientы
    $expired = $wpdb->get_col( "
        SELECT option_name FROM {$wpdb->options}
        WHERE option_name LIKE '_transient_timeout_%'
        AND option_value < UNIX_TIMESTAMP()
    " );

    if (empty($expired)) {
        return;
    }

    foreach ($expired as $timeout_option) {
        // Формируем имя transientа без префикса timeout
        $transient_name = str_replace('_transient_timeout_', '', $timeout_option);

        // Удаляем transient и его timeout
        delete_transient($transient_name);
    }
}

// Запускаем очистку при инициализации админки
add_action('admin_init', 'wpclean_delete_expired_transients');

Эта функция проверяет базу на наличие просроченных transientов и удаляет их через стандартную функцию delete_transient(), что гарантирует корректность удаления.

Использование плагинов для управления transientами

Если вы не хотите заниматься этим вручную, есть специализированные плагины, которые помогут управлять transientами:

  • Transient Cleaner — простой плагин для поиска и удаления просроченных transientов. Позволяет очищать transientы в один клик.
  • WP Optimize — комплексный плагин для оптимизации базы данных, в том числе для удаления устаревших transientов.
  • Clearfy Pro — плагин с расширенными функциями по оптимизации, включая управление transientами и очистку базы. Подробнее: Clearfy Pro на WpShop

Использование плагинов удобно, особенно если вам нужно регулярно очищать transientы без ручного вмешательства.

Как предотвратить накопление transientов: лучшие практики

Удаление — это хорошо, но лучше не допускать избыточного накопления transientов. Рекомендации:

  • Устанавливайте срок жизни transientов разумно. Не делайте время хранения слишком долгим, если данные быстро устаревают.
  • При разработке используйте функции WordPress. Создавайте transientы через set_transient() и удаляйте их через delete_transient(), чтобы избежать «зависших» записей.
  • Регулярно очищайте устаревшие transientы. Используйте крон-задачи с функцией из примера выше или плагин.
  • Проверяйте сторонние плагины. Некоторые плагины плохо управляют transientами, что ведёт к их накоплению. При подозрениях обновляйте или заменяйте такие плагины.

Эти меры помогут поддерживать базу данных в чистоте и ускорить работу сайта.

Выводы по оптимизации transientов в WordPress

Transientы — отличный инструмент для кэширования, но при неправильном управлении они могут стать причиной замедления и разрастания базы данных. Регулярная проверка и удаление неиспользуемых transientов, автоматизация этого процесса и соблюдение лучших практик разработки помогут сохранить производительность сайта на высоком уровне.

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙