Ревизии записей в WordPress — полезный инструмент для сохранения истории изменений контента. Однако с течением времени накопление большого числа ревизий приводит к раздуванию базы данных и замедлению работы сайта. В этой статье разберём, как автоматизировать удаление старых ревизий, сохранив при этом необходимые версии, используя код и плагины.
Почему важно контролировать ревизии в WordPress
По умолчанию WordPress сохраняет неограниченное количество ревизий для каждой записи или страницы. Это удобно для отката изменений, но при активной работе с сайтом количество ревизий может достигать десятков тысяч. Такая ситуация:
- Увеличивает размер базы данных;
- Замедляет выполнение запросов к базе;
- Создаёт дополнительную нагрузку при резервном копировании;
- Затрудняет администрирование.
Поэтому важно ограничить количество ревизий и периодически удалять устаревшие.
Как ограничить количество ревизий через wp-config.php
Самый простой способ — ограничить хранение ревизий на уровне настроек WordPress. Для этого добавьте в файл wp-config.php следующую строку:
define('WP_POST_REVISIONS', 5);Здесь число 5 — максимальное количество ревизий, которые будут храниться для каждой записи. Более старые версии автоматически удалятся при сохранении новых.
Если нужно полностью отключить ревизии, можно поставить значение false:
define('WP_POST_REVISIONS', false);Однако такой подход не рекомендуется, так как теряется история изменений.
Автоматическое удаление старых ревизий с помощью кода
Если нужно регулярно чистить базу от старых ревизий, можно написать кастомный скрипт. Ниже пример функции wpguest_delete_old_revisions(), которая удаляет ревизии старше 30 дней. Эту функцию можно запускать через cron или WP-Cron.
function wpguest_delete_old_revisions() {
global $wpdb;
$days = 30; // Удалять ревизии старше 30 дней
$date_limit = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$revisions = $wpdb->get_results($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_modified < %s",
$date_limit
));
if (!empty($revisions)) {
foreach ($revisions as $revision) {
wp_delete_post($revision->ID, true); // Полное удаление
}
}
}
// Запускаем функцию еженощно через WP-Cron
if (!wp_next_scheduled('wpguest_cron_delete_revisions')) {
wp_schedule_event(time(), 'daily', 'wpguest_cron_delete_revisions');
}
add_action('wpguest_cron_delete_revisions', 'wpguest_delete_old_revisions');В этом примере функция выбирает ревизии, дата изменения которых старше 30 дней, и удаляет их навсегда. Запуск через WP-Cron позволяет делать это автоматически каждый день.
Как отключить WP-Cron для повышения производительности
Если сайт большой и WP-Cron работает нестабильно, стоит отключить его и настроить системный cron задачу на сервере, которая будет запускать wp-cron.php по расписанию. Для отключения добавьте в wp-config.php:
define('DISABLE_WP_CRON', true);А затем настройте cron в Linux, например:
*/30 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1Плагины для управления ревизиями и их автоматического удаления
Если не хотите писать код, можно использовать готовые плагины с удобным интерфейсом:
- WP-Optimize — мощный плагин оптимизации базы данных с возможностью удаления ревизий по расписанию. Подробнее на WPSHOP.RU
- Better Delete Revision — простой плагин для удаления всех ревизий одним кликом. Можно запускать вручную или через WP-Cron.
- Clearfy Pro — комплексный плагин для оптимизации WordPress, в том числе умеет ограничивать и удалять ревизии автоматом. Подробнее на WPSHOP.RU
Настройка Clearfy Pro для автоматизации удаления ревизий
В Clearfy Pro есть модуль «Оптимизация базы данных», где можно включить опцию удаления ревизий старше заданного срока. Это удобно, если хотите минимизировать ручные операции и использовать проверенный инструмент.
Как безопасно работать с ревизиями: рекомендации
При автоматическом удалении ревизий важно соблюдать баланс между оптимизацией и сохранением данных:
- Оставляйте хотя бы несколько последних ревизий для каждой записи, чтобы можно было откатиться при необходимости.
- Перед массовым удалением делайте резервные копии базы данных.
- Если используете сторонние плагины, проверяйте их совместимость с вашей версией WordPress и темой.
- Тестируйте скрипты на тестовом сервере перед запуском на рабочем сайте.
Использование автоматизации позволяет существенно снизить нагрузку на базу, улучшить скорость сайта и упростить администрирование.