В WordPress при каждом сохранении записи или страницы создается новая ревизия — версия контента, которая позволяет откатиться к предыдущему состоянию. Это очень полезно, но со временем накапливаются сотни или тысячи ревизий, что замедляет работу сайта и увеличивает размер базы данных. В этой статье мы разберем, как автоматизировать процесс удаления старых чрезмерных ревизий, чтобы поддерживать базу данных в чистоте и ускорять работу сайта.
Почему важно контролировать количество ревизий в WordPress
Ревизии хранятся в таблице wp_posts с типом revision. Если сайт активно редактируется, число ревизий быстро растет. Это приводит к следующим проблемам:
- Увеличение размера базы данных, что замедляет запросы и бэкапы.
- Повышенная нагрузка на сервер при создании и поиске ревизий.
- Снижение производительности админки и загрузки постов.
Поэтому рекомендуется ограничивать количество ревизий и периодически удалять старые.
Ограничение числа ревизий через wp-config.php
Самый простой способ — задать лимит на количество ревизий, которые WordPress будет хранить для каждого поста. Для этого в файл wp-config.php добавьте строку:
define('WP_POST_REVISIONS', 5);
Это ограничит число ревизий до 5 на каждый пост. Старые ревизии будут автоматически удаляться при сохранении новых. Но этот метод не удаляет уже накопленные ревизии.
Автоматическое удаление старых ревизий по расписанию
Чтобы очистить базу данных от уже накопленных ревизий и поддерживать порядок, можно создать пользовательскую функцию, которая будет удалять ревизии старше определенного количества дней. Запустим её по расписанию с помощью WP-Cron.
Шаг 1. Создаем функцию очистки в functions.php
function wpkeys_delete_old_revisions() {
global $wpdb;
$days = 30; // удалять ревизии старше 30 дней
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$revisions = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_date < %s",
$date_threshold
));
if ($revisions) {
foreach ($revisions as $revision_id) {
wp_delete_post($revision_id, true); // true — без помещения в корзину
}
}
}
Данная функция ищет ревизии старше 30 дней и удаляет их безвозвратно.
Шаг 2. Добавляем событие в WP-Cron
Чтобы запускать функцию регулярно, добавим ей задачу в cron:
function wpkeys_schedule_revision_cleanup() {
if (! wp_next_scheduled('wpkeys_revision_cleanup_hook')) {
wp_schedule_event(time(), 'daily', 'wpkeys_revision_cleanup_hook');
}
}
add_action('wp', 'wpkeys_schedule_revision_cleanup');
add_action('wpkeys_revision_cleanup_hook', 'wpkeys_delete_old_revisions');
Теперь функция wpkeys_delete_old_revisions будет автоматически запускаться раз в сутки и удалять старые ревизии.
Оптимизация базы данных после удаления ревизий
После удаления ревизий таблица wp_posts остается фрагментированной. Рекомендуется оптимизировать базу данных, чтобы освободить место и улучшить производительность. Можно сделать это через phpMyAdmin или с помощью плагина Clearfy Pro, который включает удобный инструмент для оптимизации базы данных.
Если вы используете Clearfy Pro, оптимизацию можно запланировать и автоматизировать, что удобно для больших проектов.
Использование плагинов для управления ревизиями
Если кодирование не для вас, есть готовые решения:
- WP-Sweep — позволяет удалить ревизии, спам, черновики и оптимизировать базу одним кликом.
- Revision Control — дает удобный интерфейс для настройки количества ревизий по типам контента.
- Clearfy Pro — многофункциональный плагин для оптимизации и очистки WordPress, включая управление ревизиями.
Все эти плагины доступны на https://wpshop.ru/.
Резюме и рекомендации по настройке
Для поддержания здоровой базы данных и быстрого сайта советую комбинировать методы:
- В
wp-config.phpограничьте количество ревизий. - Добавьте автоматическую очистку старых ревизий по расписанию с помощью кода в
functions.php. - Регулярно оптимизируйте базу данных — вручную или с помощью плагинов, например, Clearfy Pro.
Так вы сохраните функциональность ревизий для отката и при этом не перегрузите сайт лишними данными.