Ревизии в WordPress — это полезная функция, которая автоматически сохраняет версии записей и страниц во время их редактирования. Это позволяет откатиться к предыдущей версии контента, если что-то пошло не так. Однако с течением времени количество ревизий может расти до нескольких тысяч, загружая базу данных и замедляя работу сайта.
В этой статье разберём, как удалить все оставшиеся ревизии в WordPress эффективно, не прибегая к установке тяжёлых плагинов и не рискуя потерять важные данные. Мы рассмотрим как стандартные SQL-запросы, так и примеры PHP-кода для удаления ревизий.
Что такое ревизии WordPress и зачем их удалять
Каждый раз, когда вы сохраняете запись или страницу в WordPress, создаётся новая ревизия. По умолчанию WordPress хранит их без ограничения, что со временем приводит к:
- Увеличению размера базы данных.
- Замедлению работы запросов к таблице
wp_posts. - Проблемам с резервным копированием и восстановлением.
Удаление ревизий позволяет оптимизировать базу данных, ускорить загрузку админки и снизить нагрузку на сервер.
Как удалить ревизии через phpMyAdmin и SQL-запросы
Самый простой и быстрый способ — это выполнить SQL-запрос напрямую в базе данных, например, через phpMyAdmin. Пример запроса для удаления всех ревизий:
DELETE FROM wp_posts WHERE post_type = 'revision';Этот запрос удалит все ревизии без разбора. Однако, если у вас большой сайт, может потребоваться выполнение этого запроса по частям или с ограничением, чтобы избежать блокировки базы данных.
Также можно заранее проверить, сколько ревизий хранится, выполнив:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';Ниже приведён пример запроса, который удалит ревизии только у записей определённого автора (например, ID автора = 5):
DELETE r FROM wp_posts r INNER JOIN wp_posts p ON r.post_parent = p.ID WHERE r.post_type = 'revision' AND p.post_author = 5;Удаление ревизий через PHP-код в functions.php или плагине
Если вы предпочитаете решение на PHP, можно создать функцию, которая удалит все ревизии с помощью WP_Query и функции wp_delete_post(). Это безопаснее, чем прямой SQL-запрос, поскольку учитывает все хуки и очистку кэша.
function wpmake_delete_all_revisions() {
$args = [
'post_type' => 'revision',
'posts_per_page' => 100,
'fields' => 'ids',
'no_found_rows' => true,
];
do {
$revisions = get_posts($args);
if (empty($revisions)) {
break;
}
foreach ($revisions as $rev_id) {
wp_delete_post($rev_id, true); // true — без помещения в корзину
}
} while (count($revisions) === 100);
}
// Запуск функции вручную (после вызова удалить или закомментировать)
wpmake_delete_all_revisions();Этот код удалит ревизии партиями по 100 штук, что предотвращает превышение лимитов памяти и времени выполнения скрипта.
Как ограничить количество ревизий в будущем
Чтобы ревизии не накапливались бесконтрольно, можно ограничить их число с помощью добавления в wp-config.php следующей строки:
define('WP_POST_REVISIONS', 5);Это ограничит количество ревизий до 5 для каждой записи. Можно поставить любое другое число или отключить ревизии полностью, указав false. Однако полностью отключать ревизии рекомендуют только опытным пользователям, так как это рискованно.
Рекомендации по безопасности и оптимизации
Перед удалением ревизий всегда делайте резервную копию базы данных. Особенно это важно при использовании SQL-запросов напрямую.
Для регулярной очистки базы данных можно использовать плагин Clearfy Pro, который позволяет автоматически удалять ревизии, спам и другие ненужные данные, улучшая производительность сайта.
Также рекомендую периодически оптимизировать базу данных с помощью SQL-запроса:
OPTIMIZE TABLE wp_posts;Это уменьшит её размер и ускорит работу.
Заключение
Удаление всех оставшихся ревизий в WordPress — важный шаг для поддержания здоровья сайта и оптимизации производительности. Выбор метода зависит от ваших навыков и предпочтений: быстрое удаление через SQL, более безопасное через PHP или автоматизация с плагинами.
Используйте представленные решения аккуратно, не забывайте про бэкапы и настройте ограничение ревизий, чтобы избежать накопления лишних данных в будущем.