Почему стоит удалять старые версии постов (ревизии) в WordPress
WordPress по умолчанию сохраняет все версии (ревизии) записей и страниц для возможности восстановления и сравнения изменений. Однако в долгосрочной перспективе это приводит к огромному объему данных в таблице wp_posts, что замедляет работу сайта и усложняет резервное копирование.
Удаление старых ревизий освобождает место, уменьшает нагрузку на базу и ускоряет запросы, особенно на крупных сайтах с большим количеством контента.
Как диагностировать количество ревизий в базе данных
Чтобы оценить, сколько ревизий накопилось, подключитесь к базе данных через phpMyAdmin или терминал и выполните запрос:
SELECT post_type, COUNT(*) as revisions_count FROM wp_posts WHERE post_type = 'revision' GROUP BY post_type;Если число ревизий превышает несколько тысяч, стоит задуматься об их удалении.
Пошаговое удаление старых ревизий через SQL-запрос
1. Резервное копирование базы данных
Перед любыми изменениями сделайте полный бэкап базы. Это позволит восстановить данные в случае ошибки.
2. Удаление ревизий
Для удаления всех ревизий выполните в базе данных следующий SQL-запрос:
DELETE FROM wp_posts WHERE post_type = 'revision';Если у вас нестандартный префикс таблиц, замените wp_ на ваш префикс.
3. Очистка метаданных ревизий
Чтобы удалить данные, связанные с ревизиями, очистите таблицу wp_postmeta:
DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts wp ON pm.post_id = wp.ID WHERE wp.ID IS NULL;Этот запрос удалит все метаданные, которые не связаны ни с одним постом (например, с удалёнными ревизиями).
Проверка результата после удаления ревизий
Повторите запрос диагностики:
SELECT post_type, COUNT(*) as revisions_count FROM wp_posts WHERE post_type = 'revision' GROUP BY post_type;Должно быть 0 записей.
Также проверьте размер таблиц через phpMyAdmin или команду SHOW TABLE STATUS LIKE 'wp_posts'; — размер таблицы должен уменьшиться.
Частые ошибки при удалении ревизий и как их исправить
- Ошибка удаления из-за внешних ключей: В некоторых конфигурациях базы данных могут быть ограничения. В этом случае отключите внешние ключи перед удалением:
SET FOREIGN_KEY_CHECKS=0; DELETE FROM wp_posts WHERE post_type = 'revision'; SET FOREIGN_KEY_CHECKS=1; - Удаление не того типа контента: Убедитесь, что удаляете именно ревизии, а не другие типы постов. Запрос должен содержать
post_type = 'revision'. - Проблемы с префиксом таблиц: Проверьте, что используете правильный префикс таблиц, он может отличаться от
wp_.
Практические советы по оптимизации и безопасности
- Для предотвращения накопления ревизий в будущем можно ограничить их количество, добавив в
wp-config.php:
Это сохранит максимум 3 ревизии на запись.define('WP_POST_REVISIONS', 3); - Регулярно планируйте оптимизацию базы данных с помощью WP-CLI:
wp db optimize - Используйте
wp cronдля автоматизации очистки ревизий с помощью пользовательских скриптов.
Сравнение способов удаления ревизий
| Метод | Преимущества | Недостатки |
|---|---|---|
| Через SQL-запрос напрямую | Быстро, не требует плагинов, полный контроль | Нужны навыки работы с базой, риск ошибок без бэкапа |
| Плагины (например, WP-Sweep, WP-Optimize) | Простота для новичков, автоматизация | Нагрузка на сайт во время работы, ограниченный контроль |
| Использование WP-CLI | Удобно для администраторов серверов, можно автоматизировать | Требуется SSH-доступ и базовые навыки командной строки |
Пример автоматического удаления ревизий через WP-CLI
wp post delete $(wp post list --post_type='revision' --format=ids) --forceЭта команда удалит все ревизии принудительно.