Старые ревизии постов в WordPress со временем накапливаются, занимая место в базе данных и потенциально снижая производительность сайта. Однако простое удаление всех ревизий может привести к нагрузке на базу данных или даже к потере важных данных. В этой статье мы рассмотрим, как эффективно и безопасно удалить старые ревизии, не влияя на работу сайта, а также автоматизировать процесс очистки.
Что такое ревизии в WordPress и зачем их удалять
Ревизии — это автосохранения и сохранённые версии постов и страниц, которые WordPress хранит для возможности отката изменений. Они полезны при редактировании, но с течением времени их количество растёт, и они начинают занимать значительный объем в базе данных.
Зачем удалять ревизии:
- Оптимизация базы данных: меньше записей — быстрее запросы.
- Экономия дискового пространства: особенно важно на хостингах с ограничениями.
- Улучшение производительности: снижается нагрузка на MySQL и PHP при выполнении запросов.
Но важно делать это аккуратно, чтобы не повредить данные и не вызвать замедление из-за тяжёлых запросов.
Как проверить количество ревизий и их влияние на базу
Для начала оценим, сколько ревизий хранится в базе. Это можно сделать через phpMyAdmin или с помощью SQL-запроса:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';Если число ревизий велико (тысячи и выше), стоит задуматься об очистке. Также полезно проверить размер таблицы wp_posts и wp_postmeta, поскольку ревизии создают мета-записи.
Удаление ревизий стандартными средствами WordPress
WordPress не предоставляет встроенного интерфейса для массового удаления ревизий, но можно использовать плагин. Среди популярных:
- Clearfy Pro — плагин для оптимизации и очистки базы данных, включая ревизии.
- WP Rocket — кеширующий плагин с функцией очистки ревизий.
Плагины удобны, но могут нагружать базу при удалении большого количества записей.
Удаление ревизий через SQL-запросы с минимальной нагрузкой
Для безопасного удаления ревизий без блокировки базы лучше удалять их пакетами. Пример функции для удаления ревизий по 500 штук за раз:
function wpid_delete_revisions_batch() {
global $wpdb;
$batch_size = 500;
$revisions = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' LIMIT %d",
$batch_size
));
if (empty($revisions)) {
return false; // Нет ревизий для удаления
}
$ids_string = implode(',', array_map('intval', $revisions));
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE ID IN ($ids_string)");
$wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE post_id IN ($ids_string)");
return true; // Удалено
}
// Вызывайте функцию по cron или вручную, пока она возвращает trueТакой подход позволяет постепенно очищать базу без пиковых нагрузок.
Ограничение количества ревизий в будущем
Чтобы предотвратить избыточное накопление ревизий, рекомендуем ограничить их число. Для этого добавьте в wp-config.php:
define('WP_POST_REVISIONS', 5); // Хранить максимум 5 ревизий на постМожно указать любое число или false для отключения ревизий (не рекомендуется).
Автоматизация удаления старых ревизий с помощью WP Cron
Для регулярной очистки старых ревизий создадим задачу cron, которая будет вызываться, например, раз в неделю:
// Регистрируем задачу
add_action('wpid_delete_revisions_event', 'wpid_delete_revisions_batch');
if (!wp_next_scheduled('wpid_delete_revisions_event')) {
wp_schedule_event(time(), 'weekly', 'wpid_delete_revisions_event');
}
// Функция удаления из предыдущего блокаТак вы не забудете про очистку, и нагрузка будет равномерной.
Пример использования плагина Clearfy Pro для очистки ревизий
Плагин Clearfy Pro позволяет быстро и безопасно удалить ревизии и оптимизировать базу. После установки и активации:
- Перейдите в меню «Оптимизация».
- Выберите пункт «Удаление ревизий».
- Запустите процесс и дождитесь завершения.
Плагин выполняет удаление пакетами и очищает связанные метаданные.
Рекомендации по безопасности перед удалением ревизий
Перед массовым удалением рекомендуется сделать резервную копию базы данных, чтобы избежать потери важных данных. Особенно это актуально, если вы вручную запускаете SQL-запросы.
Также проверяйте, что на сайте нет активных процессов, которые могут создавать ревизии в момент очистки — это поможет избежать конфликтов и ошибок.
Итог
Удаление старых ревизий — важный шаг для оптимизации WordPress сайта. Используйте пакетное удаление через код или проверенные плагины вроде Clearfy Pro, ограничьте количество ревизий в будущем и автоматизируйте очистку через WP Cron. Это позволит поддерживать базу данных в чистоте без потерь производительности и рисков.