При активном использовании WordPress на сайте со временем в базе данных накапливается большое количество удалённых записей, ревизий, транзиентов и других элементов, которые замедляют работу сайта и занимают лишнее место. В этой статье мы подробно рассмотрим, как правильно и безопасно настроить очистку базы данных WordPress от удалённых записей, чтобы поддерживать её в оптимальном состоянии.
Почему важно очищать базу данных от удалённых записей и ревизий
При удалении записей, страниц или пользовательских типов записей в WordPress, они обычно не исчезают из базы данных сразу — они попадают в корзину и остаются там некоторое время. Кроме того, WordPress сохраняет ревизии — версии записей для отката, а также транзиенты — временные данные кэширования. Если не очищать эти данные, таблицы wp_posts и wp_postmeta могут раздуваться, что приведёт к снижению производительности сайта и увеличению времени отклика.
Регулярная очистка базы данных помогает:
- Уменьшить размер базы данных и ускорить её работу.
- Снизить нагрузку на сервер при запросах к базе.
- Оптимизировать резервное копирование и восстановление.
- Поддерживать сайт в хорошем состоянии без лишнего мусора.
Основные типы данных для очистки
Удалённые записи (Trash)
Записи и страницы, помещённые в корзину, по умолчанию хранятся 30 дней, после чего автоматически удаляются. Однако на многих сайтах корзина может содержать сотни записей, которые занимают место.
Ревизии (Revisions)
Каждый раз при сохранении записи WordPress создаёт ревизию — копию предыдущей версии. Ревизии очень полезны, но их количество может сильно вырасти, если не ограничивать их количество.
Транзиенты (Transients)
Транзиенты — это временный кэш, который хранится в базе данных. Иногда они не удаляются после истечения срока, накапливая лишние записи.
Как вручную очистить базу данных через SQL-запросы
Если у вас есть доступ к базе данных через phpMyAdmin или другой инструмент, можно выполнить следующие SQL-запросы для очистки.
Удаление записей из корзины
DELETE FROM wp_posts WHERE post_status = 'trash';
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT ID FROM wp_posts);
Первый запрос удаляет все записи в статусе «trash», второй — связанные с ними метаданные.
Удаление всех ревизий
DELETE FROM wp_posts WHERE post_type = 'revision';
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT ID FROM wp_posts);
Так вы удалите все ревизии записей. Будьте осторожны, если хотите сохранить историю изменений.
Удаление устаревших транзиентов
Транзиенты хранятся в таблице wp_options с ключами, начинающимися с '_transient_'. Чтобы удалить просроченные транзиенты, выполните:
DELETE FROM wp_options WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%';
DELETE FROM wp_options WHERE option_name LIKE '_transient_timeout_%' AND option_value < UNIX_TIMESTAMP();
Автоматизация очистки базы данных через функции WordPress
Вместо ручного удаления можно написать функцию, которая будет регулярно очищать базу данных. Добавьте следующий код в файл functions.php вашей темы или в кастомный плагин.
function wpcourse_clear_trash_and_revisions() {
global $wpdb;
// Удаляем записи из корзины
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_status = 'trash'");
// Удаляем ревизии
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
// Удаляем метаданные, связанных с удалёнными записями
$wpdb->query("DELETE pm FROM {$wpdb->postmeta} pm LEFT JOIN {$wpdb->posts} p ON pm.post_id = p.ID WHERE p.ID IS NULL");
// Удаляем просроченные транзиенты
$wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%'");
$wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_timeout_%' AND option_value < UNIX_TIMESTAMP()");
}
// Запускаем очистку раз в сутки
if (!wp_next_scheduled('wpcourse_daily_db_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpcourse_daily_db_cleanup');
}
add_action('wpcourse_daily_db_cleanup', 'wpcourse_clear_trash_and_revisions');
Этот код создаёт ежедневное событие cron, которое очищает базу от мусора.
Использование плагинов для очистки базы данных
Если не хотите писать код, можно использовать проверенные плагины. Вот несколько рекомендаций:
- Clearfy Pro — продвинутый инструмент оптимизации сайта, который имеет встроенные функции для удаления ревизий, очищения корзины и транзиентов. Подробнее: Clearfy Pro на WPSHOP.
- WP-Optimize — популярный бесплатный плагин для очистки базы данных и оптимизации таблиц.
- Advanced Database Cleaner — позволяет планировать очистки, удалять ревизии, транзиенты, мусорные данные.
Использование плагинов удобно, если вы не хотите самостоятельно заниматься кодом и хотите получить интерфейс с настройками.
Как ограничить количество ревизий для предотвращения разрастания базы
Чтобы не накапливать слишком много ревизий, можно ограничить их количество в wp-config.php, добавив строку:
define('WP_POST_REVISIONS', 5);
Это сохранит только 5 последних ревизий для каждой записи, остальные будут удаляться автоматически.
Выводы и рекомендации
Оптимизация базы данных WordPress — важный аспект поддержки сайта. Регулярная очистка от удалённых записей, ревизий и транзиентов повышает скорость и стабильность работы. Можно использовать как ручные SQL-запросы, так и автоматические решения с помощью кода или плагинов. Для большинства проектов оптимальным будет комбинированный подход: ограничение ревизий, автоматическая очистка через cron и периодический аудит базы.