WordPress по умолчанию сохраняет каждое изменение записи или страницы в виде ревизий. Это удобно, если нужно откатиться к предыдущей версии, но с течением времени количество ревизий может значительно увеличиваться, что замедляет работу сайта и увеличивает размер базы данных. В этой статье разберём, как автоматически удалять старые версии записей в WordPress, чтобы поддерживать базу данных в чистоте и ускорить сайт.
Что такое ревизии в WordPress и зачем их удалять
Ревизии — это сохранённые версии записи или страницы, которые WordPress создаёт при каждом сохранении. Они позволяют восстановить предыдущий вариант контента. Однако если не ограничивать их количество, ревизии могут накапливаться до тысяч, что ведёт к увеличению размера таблиц базы данных, замедлению запросов и снижению производительности сайта.
Удалять все ревизии сразу не всегда безопасно, так как иногда полезно сохранить несколько последних версий. Идеальным решением будет автоматически удалять ревизии старше определённого времени или ограничивать их количество.
Ограничение количества ревизий в WordPress
Самый простой способ контролировать ревизии — ограничить их количество. Для этого добавьте в файл wp-config.php следующую строку:
define('WP_POST_REVISIONS', 3); // сохранять только 3 ревизии
Это ограничит количество ревизий для каждой записи до трёх. Старые ревизии будут автоматически удаляться при сохранении новых.
Однако этот метод не удалит уже накопившиеся ревизии, он работает только для новых изменений.
Автоматическое удаление старых ревизий с помощью WP-CLI
Если у вас есть доступ к командной строке, вы можете использовать WP-CLI — мощный инструмент для управления WordPress.
Команда для удаления всех ревизий из базы данных:
wp post delete $(wp post list --post_type='revision' --format=ids) --force
Для автоматизации запуска этой команды можно добавить её в cron-задачу на сервере, чтобы ревизии удалялись регулярно.
Автоматическое удаление старых ревизий через плагин
Если вы предпочитаете не использовать командную строку, можно настроить автоматическое удаление через плагин. Например, плагин Clearfy Pro позволяет оптимизировать базу данных, включая удаление ревизий по расписанию.
После установки и активации Clearfy Pro:
- Перейдите в раздел «Оптимизация»;
- Включите опцию удаления ревизий;
- Настройте периодичность автоматической очистки.
Это позволит автоматически поддерживать базу данных в чистоте без вмешательства.
Код для автоматического удаления ревизий старше 30 дней
Если хотите реализовать удаление ревизий программно, можно добавить следующий код в functions.php вашей темы или в собственный плагин:
function wpcource_delete_old_revisions() {
global $wpdb;
$days = 30; // удалять ревизии старше 30 дней
$date = 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
));
if (!empty($revisions)) {
foreach ($revisions as $rev_id) {
wp_delete_post($rev_id, true);
}
}
}
// Запускаем функцию раз в сутки через cron
if (!wp_next_scheduled('wpcource_daily_revision_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpcource_daily_revision_cleanup');
}
add_action('wpcource_daily_revision_cleanup', 'wpcource_delete_old_revisions');
Этот код создаёт ежедневное задание, которое удаляет ревизии старше 30 дней, освобождая место в базе данных.
Дополнительные рекомендации по работе с ревизиями
Помимо удаления старых ревизий, рекомендуем:
- Ограничить количество ревизий в
wp-config.php; - Регулярно оптимизировать базу данных, например, с помощью плагина Clearfy Pro;
- Избегать лишних сохранений при редактировании;
- Проводить регулярные бэкапы, чтобы иметь возможность восстановить данные.
Выводы
Автоматическое удаление старых версий записей — важная задача для поддержания производительности WordPress-сайта. Используйте ограничение ревизий в wp-config.php, автоматизируйте очистку с помощью WP-CLI или плагинов, а при необходимости реализуйте удаление старых ревизий программно. Это поможет сохранить базу данных оптимизированной и ускорить работу сайта.