Автосохранения (autosave) и ревизии (revisions) — важные функции WordPress, которые помогают предотвратить потерю данных и сохранять историю изменений постов и страниц. Однако со временем их накопление может значительно увеличить размер базы данных, замедлить работу сайта и усложнить резервное копирование. В этой статье подробно разберём, как грамотно удалить накопившиеся автосохранения и ревизии, а также как ограничить их количество для поддержания оптимальной производительности.
Почему нужно удалять автосохранения и ревизии в WordPress
При работе с контентом WordPress регулярно создаёт автосохранения и сохраняет ревизии каждой записи. Это удобно для восстановления изменений, но при большом количестве записей и длительной работе сайта таблицы базы данных wp_posts и wp_postmeta могут разрастаться до огромных размеров.
Из-за этого медленнее работают запросы к базе, увеличивается время резервного копирования, а также могут возникать проблемы с хостингом из-за превышения лимитов.
Удаление старых и ненужных ревизий и автосохранений позволяет значительно уменьшить вес базы данных и ускорить сайт.
Как удалить автосохранения и ревизии с помощью SQL-запросов
Самый прямой способ — удалить записи из базы данных напрямую. Для этого можно использовать SQL-запросы через phpMyAdmin или любой другой инструмент для работы с базой.
Автосохранения в базе данных хранятся с post_type = 'autosave', а ревизии — с post_type = 'revision'.
Удаление всех автосохранений
DELETE FROM wp_posts WHERE post_type = 'autosave';
Этот запрос удалит все автосохранения, освобождая место в базе.
Удаление всех ревизий
DELETE FROM wp_posts WHERE post_type = 'revision';
После выполнения этого запроса в базе останутся только основные версии записей.
Удаление ревизий и автосохранений с очисткой метаданных
Ревизии и автосохранения могут иметь связанные записи в таблице wp_postmeta. Чтобы полностью очистить базу, нужно удалить и их метаданные:
DELETE pm FROM wp_postmeta pm
INNER JOIN wp_posts p ON pm.post_id = p.ID
WHERE p.post_type IN ('revision', 'autosave');
Затем удалить сами записи:
DELETE FROM wp_posts WHERE post_type IN ('revision', 'autosave');
Как ограничить количество ревизий в WordPress через functions.php
Чтобы предотвратить чрезмерное накопление ревизий, можно ограничить их количество с помощью константы WP_POST_REVISIONS. Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:
define('WP_POST_REVISIONS', 3); // Оставлять не более 3 ревизий для каждой записи
Таким образом, WordPress будет сохранять только 3 последние ревизии, а старые удалять автоматически.
Если хотите полностью отключить ревизии, можно установить значение false:
define('WP_POST_REVISIONS', false);
Но делайте это с осторожностью — потеря истории изменений может привести к проблемам при редактировании.
Плагины для управления ревизиями и оптимизации базы данных
Если хотите автоматизировать процесс, есть несколько удобных плагинов:
- Clearfy Pro — содержит инструменты для очистки базы данных, удаления ревизий и оптимизации сайта. Ссылка: wpshop.ru/clearfy-pro
- WP-Optimize — популярный плагин для очистки базы данных и оптимизации таблиц. Позволяет удалять ревизии, спам, временные данные.
- Revision Control — позволяет гибко настроить количество ревизий для каждого типа записи.
Использование плагинов облегчает задачу, особенно если вы не хотите работать с SQL напрямую.
Как создать собственную функцию для удаления старых ревизий в WordPress
Для автоматизации удаления ревизий можно написать простой код, который будет запускаться по крону или вручную. Ниже пример функции clearfy_delete_old_revisions(), удаляющей ревизии старше 30 дней:
function clearfy_delete_old_revisions() {
global $wpdb;
$date = date('Y-m-d H:i:s', strtotime('-30 days'));
$revisions = $wpdb->get_col(
$wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_date < %s",
$date
)
);
if (!empty($revisions)) {
foreach ($revisions as $revision_id) {
wp_delete_post($revision_id, true);
}
}
}
// Запуск функции вручную
// clearfy_delete_old_revisions();
Эту функцию можно привязать к wp_cron для регулярной очистки.
Выводы и рекомендации
Удаление автосохранений и ревизий — эффективный способ снизить нагрузку на базу данных и ускорить работу сайта. При этом важно не отключать эти функции полностью, а ограничить их количество и периодически очищать накопившиеся записи.
Используйте SQL-запросы для быстрой очистки или плагины для автоматизации. Для тонкой настройки количества ревизий добавляйте константу WP_POST_REVISIONS в wp-config.php или functions.php.
Если вам нужны удобные инструменты для комплексной оптимизации и очистки базы, советуем обратить внимание на Clearfy Pro, который объединяет в себе множество полезных функций для ускорения и безопасности WordPress.