С каждой правкой в записи WordPress сохраняет её ревизию — копию версии поста на момент сохранения. Это удобно, если нужно откатиться к предыдущему варианту, но со временем ревизии накапливаются и могут значительно увеличить размер базы данных, замедляя работу сайта. В этой статье подробно разберём, как удалить старые ревизии постов в WordPress, чтобы оптимизировать базу данных, а также рассмотрим плагины и кодовые решения для автоматизации процесса.
Что такое ревизии в WordPress и почему их нужно удалять
Ревизии — это автоматические или ручные сохранённые версии записей и страниц. Они позволяют восстановить предыдущие варианты контента. Но при активном редактировании количество ревизий растёт, и база данных раздувается. Это приводит к увеличению времени запросов к базе, замедлению работы административной панели и даже росту расхода ресурсов хостинга.
Удаление ненужных ревизий помогает:
- Сократить размер таблицы
wp_postsиwp_postmeta - Ускорить работу запросов к базе данных
- Снизить нагрузку на сервер
- Оптимизировать бэкапы и миграции
Важно понимать, что удалять стоит только старые ревизии, оставляя последние для возможности отката.
Как удалить старые ревизии вручную через SQL-запросы
Для опытных пользователей удобен способ очистки ревизий напрямую в базе данных. Перед выполнением обязательно сделайте резервную копию базы!
Чтобы удалить все ревизии, используйте следующий запрос:
DELETE FROM wp_posts WHERE post_type = 'revision';
Но это удалит все ревизии без исключения. Чтобы оставить, например, последние 3 ревизии на каждый пост, нужно применять более сложные запросы с подзапросами. Вот пример, который удалит все ревизии, кроме 3 последних для каждого поста:
DELETE r1 FROM wp_posts r1
LEFT JOIN (
SELECT ID FROM (
SELECT ID, post_parent
FROM wp_posts
WHERE post_type = 'revision'
ORDER BY post_parent, post_date DESC
) AS sub
GROUP BY post_parent
HAVING COUNT(*) > 3
) r2 ON r1.ID = r2.ID
WHERE r1.post_type = 'revision' AND r2.ID IS NOT NULL;
Однако такие запросы могут быть сложны для понимания и рискованны без опыта SQL.
Использование плагинов для удаления ревизий
Если вы не хотите вручную работать с базой данных, можно использовать плагины. Они безопасно удалят старые ревизии и предоставят дополнительные настройки.
WP-Optimize
Очень популярный плагин для оптимизации базы данных, который умеет удалять ревизии, спам-комментарии, очищать транзиенты и многое другое. Позволяет настроить автоматическую очистку.
Скачать: WP-Optimize на wpshop.ru
Advanced Database Cleaner
Плагин для детальной очистки базы данных, позволяет удалять ревизии по возрасту, очищать таблицы, оптимизировать её структуру.
Полезно, если хотите гибко контролировать процесс удаления ревизий.
Скачать: Advanced Database Cleaner на wpshop.ru
Автоматическое ограничение количества ревизий через functions.php
Чтобы предотвратить накопление большого количества ревизий в будущем, можно ограничить их число. Добавьте следующий код в файл functions.php вашей темы или в плагин для пользовательских функций:
function wpdream_limit_post_revisions() {
return 3; // оставляем максимум 3 ревизии на пост
}
add_filter('wp_revisions_to_keep', 'wpdream_limit_post_revisions');
Так WordPress будет сохранять не более трёх ревизий для каждой записи, что значительно сократит размер базы данных.
Удаление ревизий программно с помощью WP-CLI
Если у вас есть доступ к серверу и установлен WP-CLI, можно быстро удалить ревизии командой:
wp post delete $(wp post list --post_type='revision' --format=ids) --force
Это удалит все ревизии без возврата. Перед выполнением убедитесь, что у вас есть резервная копия.
Как проверить сколько ревизий хранится в базе
Для оценки текущей ситуации можно выполнить SQL-запрос, чтобы узнать количество ревизий:
SELECT COUNT(*) AS revisions_count FROM wp_posts WHERE post_type = 'revision';
Если число сильно большое (тысячи и более), рекомендуется провести очистку.
Рекомендации по оптимизации после удаления ревизий
После удаления ревизий желательно оптимизировать таблицы базы данных, чтобы освободить место и улучшить производительность. Это можно сделать через phpMyAdmin или WP-CLI:
OPTIMIZE TABLE wp_posts;
Также полезно использовать плагины, например, Clearfy Pro, который содержит инструменты для оптимизации и очистки базы данных.