Система ревизий в WordPress — отличный механизм для подстраховки, позволяющий откатиться к предыдущим версиям записи. Однако со временем тысячи сохраненных копий раздувают таблицу wp_posts. Это приводит к увеличению размера базы данных, замедлению SQL-запросов и долгому созданию бэкапов.
Чтобы решить эту проблему раз и навсегда, нужно действовать в три этапа: очистить старое, ограничить новое и настроить автоматизацию.
Важное предупреждение
Перед выполнением любых SQL-запросов обязательно сделайте полную резервную копию базы данных.
Этап 1. Очистка базы данных от накопленных ревизий
Если вашему сайту уже несколько лет, в базе могут храниться десятки тысяч ненужных ревизий. Чтобы удалить их вручную, вам потребуется доступ к phpMyAdmin (или другому интерфейсу работы с MySQL).
1. Базовый запрос для удаления ревизий
Этот SQL-запрос удалит все записи, которые помечены как ревизии:
DELETE FROM wp_posts WHERE post_type = 'revision';
2. Продвинутый запрос (полная очистка с метаданными)
Когда WordPress удаляет ревизии, в базе могут остаться «сироты» — метаданные и связи, которые относились к этим ревизиям. Чтобы очистить всё начисто, используйте этот сниппет (убедитесь, что префикс ваших таблиц — wp_, если он другой, измените его в коде):
DELETE a,b,c
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision';
Этап 2. Ограничение количества ревизий (чтобы они не накапливались)
После чистки базы нужно сделать так, чтобы проблема не вернулась. Для этого мы зададим жесткие правила сохранения.
Откройте корневой файл вашего сайта wp-config.php (он лежит в главной папке WordPress) и добавьте нужный сниппет перед строкой /* That's all, stop editing! Happy publishing. */.
Вариант А: Ограничить количество (Рекомендуется)
Чтобы сохранить баланс между безопасностью контента и чистотой базы, установите лимит версий.
define( 'WP_POST_REVISIONS', 3 );
Это ограничит количество хранимых версий для каждой записи ровно тремя. Старые ревизии будут автоматически удаляться (заменяться новыми). Выберите разумный лимит (обычно от 3 до 5), который устроит ваш рабочий процесс.
Вариант Б: Полностью отключить ревизии
Значение false полностью отключит сохранение ревизий.
define( 'WP_POST_REVISIONS', false );
Используйте это только если уверены в своих действиях, так как это лишит вас возможности отката изменений при случайном удалении текста.
Бонус-сниппет: Увеличение интервала автосохранения
По умолчанию WordPress сохраняет черновик каждые 60 секунд. Это тоже создает лишнюю нагрузку. Вы можете увеличить этот интервал, например, до 5 минут (300 секунд):
define( 'AUTOSAVE_INTERVAL', 300 );
Этап 3. Профилактика и регулярный контроль
Даже с установленными лимитами поддержание чистоты лучше автоматизировать.
- Плагины для автоматизации: После ручной чистки базы включите автоматическое удаление ревизий и другого мусора (спам-комментариев, транзитных опций) с помощью плагинов. Например, WP Optimize или Advanced Database Cleaner умеют запускать очистку по расписанию (cron-задачи).
- Мониторинг таблиц: Возьмите за правило хотя бы раз в месяц проверять размер таблицы
wp_postsиwp_postmetaчерез phpMyAdmin. Это поможет вовремя заметить проблему, если какой-то плагин начнет генерировать избыточные данные.
Быстрый и чистый сайт начинается с аккуратной базы данных. Внедрив эти три шага, вы значительно снизите нагрузку на сервер и ускорите отклик админ-панели.
