Автоматическое удаление старых ревизий в WordPress

Ревизии в WordPress — это полезная функция, которая позволяет сохранить историю изменений записей и страниц. Однако со временем их количество может накапливаться, занимая значительный объем базы данных и замедляя работу сайта. В этой статье разберем, как автоматически удалять старые ревизии, сохраняя при этом последние необходимые версии, с помощью собственного кода и плагинов.

Что такое ревизии в WordPress и зачем их удалять

Каждый раз при сохранении записи WordPress создает ревизию — копию предыдущей версии. Это позволяет откатиться к более раннему варианту, если что-то пошло не так. Но без контроля ревизии накапливаются в базе данных, что приводит к:

  • Увеличению размера таблиц wp_posts и wp_postmeta.
  • Замедлению запросов к базе при работе с контентом.
  • Увеличению времени резервного копирования и восстановления.

Оптимальным решением является автоматическое удаление ревизий старше определенного периода или ограничение их количества на запись.

Ограничение количества ревизий через файл wp-config.php

Самый простой способ контролировать ревизии — задать лимит их количества. Для этого достаточно добавить в wp-config.php следующую строку:

define('WP_POST_REVISIONS', 5);

Где 5 — максимальное число ревизий, которые будут храниться для каждой записи. Более старые ревизии WordPress автоматически удалит при сохранении новых.

Если указать false, то ревизии отключатся совсем, но это не рекомендуется, так как теряется возможность отката изменений.

Автоматическое удаление ревизий старше определенного времени с помощью кода

Чтобы удалять ревизии старше, например, 30 дней, можно использовать WP-Cron и кастомную функцию. Такой подход удобен, если вы хотите держать только свежие версии.

Добавьте в файл functions.php вашей темы или в плагин следующий код:

function wpquery_delete_old_revisions() {
    global $wpdb;
    $days = 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 (!empty($revisions)) {
        foreach ($revisions as $revision_id) {
            wp_delete_post($revision_id, true);
        }
    }
}

// Планируем задачу, если она не запланирована
if (!wp_next_scheduled('wpquery_cron_delete_old_revisions')) {
    wp_schedule_event(time(), 'daily', 'wpquery_cron_delete_old_revisions');
}

add_action('wpquery_cron_delete_old_revisions', 'wpquery_delete_old_revisions');

Этот код создаст ежедневное задание, которое будет удалять все ревизии старше 30 дней. Вы можете изменить период, изменив переменную $days.

Объяснение кода

Мы напрямую обращаемся к таблице wp_posts, выбираем ревизии с датой создания меньше пороговой, и удаляем их функцией wp_delete_post с параметром true, чтобы удалить без возможности восстановления.

Использование WP-Cron гарантирует, что задача будет выполняться регулярно без вашего участия.

Плагины для автоматического удаления ревизий

Если вы предпочитаете готовые решения, рассмотрите следующие плагины:

  • WP-Optimize — популярный плагин для очистки и оптимизации базы данных, включает функцию удаления старых ревизий. Подробнее: WP-Optimize на WPSHOP.RU
  • Advanced Database Cleaner — позволяет настроить расписание для удаления ревизий и других мусорных данных базы.
  • Clearfy Pro — платный плагин с широким функционалом оптимизации, в том числе управлением ревизиями. Подробнее: Clearfy Pro на WPSHOP.RU

Все эти плагины имеют удобный интерфейс и позволяют быстро настроить очистку без ручного кода.

Рекомендации по безопасности и производительности

Перед внедрением автоматического удаления ревизий обязательно сделайте бэкап базы данных. Это поможет избежать потери важных данных.

Также рекомендуется тестировать скрипт удаления на тестовом сайте, чтобы убедиться, что он не удаляет нужный контент.

Если у вас большой сайт с десятками тысяч записей, выполнение удаления ревизий за один запуск может нагружать сервер. В этом случае стоит реализовать пакетное удаление, например, удалять по 100 ревизий за раз с повторным запуском до полного очищения.

Пример пакетного удаления ревизий

function wpquery_delete_old_revisions_batch() {
    global $wpdb;
    $days = 30;
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
    $limit = 100; // количество удаляемых за один запуск

    $revisions = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_date < %s LIMIT %d",
        $date_threshold, $limit
    ));

    if (!empty($revisions)) {
        foreach ($revisions as $revision_id) {
            wp_delete_post($revision_id, true);
        }
    }
}

// Используйте wp_schedule_event для запуска этой функции ежедневно

Такой подход снизит нагрузку на сервер при очистке больших объемов ревизий.

Итог

Автоматическое удаление старых ревизий — важный шаг для оптимизации WordPress, особенно на больших и активно редактируемых сайтах. Вы можете ограничить количество ревизий в wp-config.php, использовать WP-Cron с кастомным кодом для удаления ревизий старше заданного срока или воспользоваться готовыми плагинами.

Поддержка базы данных в чистоте улучшит скорость сайта, снизит нагрузку на сервер и ускорит резервное копирование. Рекомендуем внедрять такие решения в рамках комплексной оптимизации WordPress.

Как отображать поля ACF в REST API WordPress
24.01.2026
WooCommerce не отображает атрибуты продуктов: как исправить
19.04.2026
WooCommerce: SKU не обновляется при редактировании товара — как исправить
01.06.2026
Как удалить дубликаты постов в WordPress: эффективные методы и примеры кода
11.01.2026
Удаление неактивных пользователей WordPress по дате регистрации
03.04.2026