В WordPress по умолчанию сохраняются все версии (ревизии) записей, что позволяет откатиться к предыдущим вариантам текста. Однако со временем количество ревизий может значительно увеличиться, занимая место в базе данных и замедляя работу сайта. Особенно это заметно на сайтах с большим количеством записей и частыми правками. В этой статье расскажу, как эффективно удалить старые ревизии постов без использования плагинов, используя чистый код и SQL-запросы, а также как настроить WordPress для ограничения ревизий в будущем.
Что такое ревизии в WordPress и зачем их удалять
Ревизии — это автоматические сохранения изменений поста или страницы. Каждый раз при сохранении или обновлении записи создаётся новая ревизия. Это полезно для восстановления информации, если что-то пошло не так, но со временем ревизии могут накапливаться и сильно раздувать таблицу wp_posts в базе данных.
Из-за большого количества ревизий увеличивается размер базы данных, замедляется резервное копирование и бэкап, а в некоторых случаях — и скорость загрузки сайта. Поэтому периодическая очистка старых ревизий — важная задача для поддержания производительности WordPress.
Удаление ревизий через SQL-запрос
Самый быстрый способ удалить все ревизии — выполнить SQL-запрос напрямую в базе данных через phpMyAdmin или другой инструмент управления базой.
DELETE FROM wp_posts WHERE post_type = 'revision';
Этот запрос удалит все ревизии, но будьте осторожны: он удалит абсолютно все, без возможности восстановления. Рекомендуется сделать бэкап базы данных перед выполнением.
Если хотите удалить только старые ревизии, например, старше 30 дней, можно использовать:
DELETE FROM wp_posts
WHERE post_type = 'revision'
AND post_date < DATE_SUB(NOW(), INTERVAL 30 DAY);
Так вы сохраните недавние ревизии и удалите только устаревшие.
Удаление ревизий с помощью PHP-кода в functions.php
Если не хотите работать напрямую с базой, можно написать функцию для удаления ревизий с помощью WP_Query и функций WordPress.
Добавьте в файл functions.php вашей темы следующий код:
function wpbox_delete_old_revisions() {
global $wpdb;
$days = 30; // Удаляем ревизии старше 30 дней
$query = $wpdb->prepare(
"DELETE p FROM {$wpdb->posts} p
WHERE p.post_type = 'revision'
AND p.post_date < NOW() - INTERVAL %d DAY",
$days
);
$deleted = $wpdb->query($query);
if($deleted === false) {
error_log('WPBOX: Ошибка при удалении ревизий');
} else {
error_log('WPBOX: Удалено ревизий: ' . $deleted);
}
}
// Запускаем один раз через админ-панель или WP-CLI
// wpbox_delete_old_revisions();
Эту функцию можно запускать вручную, либо через WP-CLI, либо добавить вызов по расписанию (cron). Важно убрать вызов функции после однократного использования, чтобы не удалять ревизии постоянно.
Ограничение количества ревизий в WordPress
Чтобы не накапливать слишком много ревизий, можно ограничить их количество в настройках WordPress. Для этого добавьте в wp-config.php следующую строку:
define('WP_POST_REVISIONS', 5);
Здесь 5 — максимальное количество ревизий, которое будет храниться для каждого поста. Если указать 0, ревизии отключатся полностью, что не рекомендуется, так как теряется возможность отката.
Ограничение ревизий поможет предотвратить чрезмерный рост таблицы в будущем.
Плагины для управления ревизиями и оптимизации базы
Хотя в статье показаны решения без плагинов, иногда удобно использовать специализированные инструменты:
- Clearfy Pro — позволяет оптимизировать базу, удалять ревизии, очищать мусор без лишних настроек.
- WPRemark — плагин с набором инструментов для работы с данными и оптимизации.
Использование плагинов удобно для регулярного обслуживания, но для однократной очистки подойдет и код из статьи.
Выводы и рекомендации
Удаление старых ревизий — важный шаг для оптимизации WordPress-сайта. Самый простой и быстрый способ — SQL-запрос, но он требует осторожности. Код на PHP позволяет интегрировать удаление в админ-панель или автоматизировать процесс. Не забывайте ограничивать количество ревизий через wp-config.php, чтобы минимизировать нагрузку на базу в будущем.
Если хотите более удобное и безопасное решение, попробуйте плагины, например, Clearfy Pro. Это позволит поддерживать базу в порядке без лишних усилий.