С каждой правкой вашего поста WordPress автоматически сохраняет его ревизии — копии предыдущих версий. Это полезно для восстановления текста, но со временем накопление ревизий увеличивает размер базы данных и может замедлять работу сайта. В этой статье подробно расскажу, как удалить старые ревизии постов WordPress, чтобы оптимизировать базу данных и не потерять важные данные.
Что такое ревизии в WordPress и почему их нужно удалять
Ревизии — это версии записи или страницы, автоматически сохраняемые WordPress при каждом обновлении. Они позволяют откатиться к предыдущему состоянию контента, если что-то пошло не так.
Однако при активном редактировании накапливается множество ревизий, особенно на больших сайтах. Это влияет на размер таблиц в базе данных, ухудшая производительность запросов и увеличивая время резервного копирования.
Поэтому периодическая очистка старых ревизий — хорошая практика оптимизации. Но нужно делать это аккуратно, чтобы не потерять нужные версии.
Как удалить все старые ревизии через базу данных MySQL
Самый простой и быстрый способ — выполнить SQL-запрос, который удалит все ревизии из таблицы wp_posts. Ревизии имеют тип revision.
Перед выполнением обязательно создайте резервную копию базы данных! Неправильный запрос может повредить данные.
DELETE FROM wp_posts WHERE post_type = 'revision';
Этот запрос удалит все ревизии. Однако если вы хотите сохранить последние 1-2 версии, придется использовать более сложные методы.
Удаление ревизий, оставляя последние по каждому посту
Для этого можно использовать PHP-скрипт, который перебирает ревизии и удаляет все, кроме последних n штук на пост.
Пример функции с префиксом wpteam_:
function wpteam_delete_old_revisions($keep = 2) {
global $wpdb;
$posts = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' ORDER BY post_parent, post_date DESC");
$current_post = 0;
$count = 0;
foreach ($posts as $post_id) {
$parent = $wpdb->get_var($wpdb->prepare("SELECT post_parent FROM {$wpdb->posts} WHERE ID = %d", $post_id));
if ($parent != $current_post) {
$current_post = $parent;
$count = 1;
} else {
$count++;
}
if ($count > $keep) {
wp_delete_post($post_id, true); // принудительное удаление
}
}
}
Эта функция удалит все ревизии, кроме последних двух для каждого поста. Запустите её один раз через плагин для пользовательских функций или в консоли WP-CLI.
Использование плагина Clearfy Pro для управления ревизиями
Если вы предпочитаете графический интерфейс, рекомендую плагин Clearfy Pro. В нём есть удобный модуль для удаления и ограничения ревизий.
Вы можете настроить:
- Максимальное количество ревизий для хранения
- Автоматическое удаление старых ревизий по расписанию
- Удаление ревизий вручную в один клик
Clearfy Pro также помогает в других аспектах оптимизации сайта, что полезно для комплексного подхода.
Ограничение количества ревизий для новых постов через wp-config.php
Чтобы избежать накопления ревизий в будущем, можно ограничить их количество. Для этого в файл wp-config.php добавьте строку:
define('WP_POST_REVISIONS', 3);
Значение 3 означает, что WordPress будет хранить только три последних ревизии каждого поста. Старые автоматически удалятся.
Если указать false — ревизии отключатся полностью, но это рискованно, так как потеряется возможность восстановления.
Удаление ревизий с помощью WP-CLI
Если у вас есть доступ к командной строке сервера, WP-CLI — мощный инструмент для управления WordPress.
Команда для удаления всех ревизий:
wp post delete $(wp post list --post_type='revision' --format=ids) --force
Это быстро и удобно, особенно на больших сайтах.
Создание кастомной команды WP-CLI для удаления ревизий с ограничением
Можно написать свою команду, которая будет удалять ревизии, оставляя последние n.
Пример кода для файла wp-cli.php в вашей теме или плагине:
if (defined('WP_CLI') && WP_CLI) {
WP_CLI::add_command('wpteam delete-revisions', function($args) {
$keep = isset($args[0]) ? (int)$args[0] : 2;
wpteam_delete_old_revisions($keep);
WP_CLI::success("Deleted old revisions, kept last {$keep} per post.");
});
}
Так вы сможете вызывать wp wpteam delete-revisions 3 для удаления с сохранением трех последних ревизий.
Как предотвратить чрезмерное накопление ревизий: лучшие практики
Кроме ограничения числа ревизий, следуйте рекомендациям:
- Редактируйте контент аккуратно, избегая частых мелких сохранений
- Используйте визуальные редакторы с функцией автосохранения, но контролируйте частоту
- Периодически чистите базу данных с помощью SQL или плагинов
- Делайте резервные копии перед удалением и оптимизацией
Так вы сохраните баланс между безопасностью данных и производительностью сайта.
Заключение
Удаление старых ревизий — важный этап оптимизации WordPress, который позволяет уменьшить нагрузку на базу данных и ускорить работу сайта. В статье мы рассмотрели несколько практических способов: от простого SQL-запроса до кастомных функций и использования плагина Clearfy Pro.
Рекомендую комбинировать эти методы и не забывать о регулярных резервных копиях. Если нужно автоматизировать процесс — WP-CLI и Clearfy Pro помогут сделать это быстро и удобно.
Подробнее о плагине Clearfy Pro и других решениях для улучшения WordPress можно узнать на официальном сайте WPSHOP.