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

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

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

Ревизии — это встроенный механизм сохранения истории изменений записей и страниц в WordPress. Каждый раз, когда вы нажимаете «Обновить» для поста, создаётся новая ревизия. Это полезно для восстановления предыдущего варианта текста, но одновременно приводит к росту таблицы wp_posts и замедлению запросов к базе данных.

Если сайт активно редактируется, база данных может содержать тысячи ревизий, которые занимают место и увеличивают время отклика. Удаление старых ревизий помогает:

  • Снизить размер базы данных и ускорить её работу.
  • Уменьшить время резервного копирования.
  • Повысить общую производительность сайта, особенно при работе с большими объёмами контента.

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

Использование плагина WPMA Revision Cleaner для автоматического удаления

Для пользователей, которые предпочитают готовые решения, существует специализированный плагин WPMA Revision Cleaner. Он позволяет автоматически удалять ревизии старше заданного срока и сохранять только определённое количество последних версий.

Основные возможности плагина:

  • Автоматическое удаление ревизий по расписанию (WP-Cron).
  • Настройка максимального количества ревизий для каждого поста.
  • Возможность очищать ревизии только для выбранных типов записей.
  • Легкий интерфейс управления в админке.

Установка плагина стандартная: загрузите на сайт, активируйте, задайте параметры и плагин начнёт работать в фоне.

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

Если не хочется устанавливать плагин, можно реализовать автоматическую очистку ревизий программно. Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

function wpma_delete_old_revisions() {
    global $wpdb;
    // Оставляем последние 3 ревизии, удаляем остальные
    $limit = 3;
    // Получаем ID постов с ревизиями
    $posts_with_revisions = $wpdb->get_col("SELECT DISTINCT post_parent FROM {$wpdb->posts} WHERE post_type = 'revision'");
    
    foreach ($posts_with_revisions as $post_id) {
        // Получаем ревизии по дате, кроме последних $limit
        $old_revisions = $wpdb->get_col($wpdb->prepare(
            "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_parent = %d ORDER BY post_date DESC LIMIT 18446744073709551615 OFFSET %d",
            $post_id,
            $limit
        ));
        
        if (!empty($old_revisions)) {
            foreach ($old_revisions as $rev_id) {
                wp_delete_post($rev_id, true);
            }
        }
    }
}

// Планируем событие раз в сутки
if (!wp_next_scheduled('wpma_daily_delete_revisions')) {
    wp_schedule_event(time(), 'daily', 'wpma_daily_delete_revisions');
}

add_action('wpma_daily_delete_revisions', 'wpma_delete_old_revisions');

Этот код оставляет последние 3 ревизии для каждого поста и удаляет все более старые. Событие планируется раз в сутки с помощью WP-Cron. Таким образом, база будет регулярно очищаться без участия администратора.

Как ограничить количество ревизий при сохранении записи

Ещё один способ оптимизации — не разрешать WordPress сохранять слишком много ревизий. Для этого можно установить лимит в конфигурационном файле wp-config.php:

define('WP_POST_REVISIONS', 3);

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

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

Оптимизация базы данных после удаления ревизий

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

Для этого можно воспользоваться плагином Clearfy Pro с функцией оптимизации базы или выполнить SQL-запрос напрямую:

OPTIMIZE TABLE wp_posts;

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

Заключение: что использовать и как настроить

Для автоматического удаления старых ревизий на сайте с доменом wpma.ru рекомендуем следующий подход:

  1. Ограничить количество ревизий через WP_POST_REVISIONS.
  2. Настроить автоматическое удаление старых ревизий с помощью кода из статьи или использовать плагин WPMA Revision Cleaner.
  3. Регулярно оптимизировать базу данных для поддержания производительности.

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

Автоматическое отключение способов оплаты при неподтверждённых заказах в WooCommerce
19.05.2026
WooCommerce: автоматическое отключение способов оплаты при неподтверждённых заказах
03.06.2026
Как избежать проблем с бесконечным переадресом в WordPress
19.02.2026
Как создать собственный виджет в WordPress
23.11.2025
Как создать автоматический импорт пользователей в WordPress из CSV
16.04.2026