Как автоматически удалять старые версии постов в WordPress

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

Почему важно контролировать ревизии постов в WordPress

Ревизии помогают избежать потери данных, но если их не контролировать, они накапливаются в таблице wp_posts и занимают значительный объём базы данных. Это замедляет запросы и увеличивает время резервного копирования. Особенно это заметно на сайтах с большим количеством публикаций и активными редакторами.

Удаление старых версий помогает:

  • Уменьшить размер базы данных.
  • Ускорить работу сайта и админки.
  • Повысить эффективность резервного копирования.

При этом важно сохранить последние несколько версий для возможности отката.

Как ограничить количество ревизий с помощью настроек WordPress

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

define('WP_POST_REVISIONS', 3);

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

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

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

Для очистки уже накопившихся ревизий можно создать функцию, которая будет удалять ревизии старше определённого времени или оставлять только определённое количество последних. Ниже пример функции для удаления всех ревизий, кроме последних трёх:

function wpclass_delete_old_revisions() {
    global $wpdb;
    // Получаем ID постов с ревизиями
    $posts = $wpdb->get_results("SELECT DISTINCT post_parent FROM {$wpdb->posts} WHERE post_type = 'revision'");

    foreach ($posts as $post) {
        $revisions = $wpdb->get_results($wpdb->prepare(
            "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_parent = %d ORDER BY post_date DESC",
            $post->post_parent
        ));

        if (count($revisions) > 3) {
            $revisions_to_delete = array_slice($revisions, 3);
            foreach ($revisions_to_delete as $revision) {
                wp_delete_post($revision->ID, true);
            }
        }
    }
}

// Запускать регулярно через WPClass Cron или вручную
wpclass_delete_old_revisions();

Такую функцию можно запускать по расписанию, используя WPClass Cron (подробнее в статье Как создать автоматические задачи в WordPress с помощью WPClass Cron).

Удаление ревизий старше определённого времени

Можно настроить удаление ревизий, которым больше определённого количества дней. Например, ревизии старше 30 дней:

function wpclass_delete_revisions_older_than_30_days() {
    global $wpdb;
    $days = 30;
    $date = 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_date < %s",
        $date
    ));

    foreach ($revisions as $revision) {
        wp_delete_post($revision->ID, true);
    }
}

wpclass_delete_revisions_older_than_30_days();

Использование плагинов для управления ревизиями

Если не хочется писать код, можно воспользоваться плагинами. Например:

  • WP Revisions Control — позволяет ограничить количество ревизий на пост прямо из админки.
  • Clearfy Pro (https://wpshop.ru/plugins/clearfy-pro/?utm_source=wpclass.ru&utm_medium=article&utm_campaign=kak-avtomaticheski-udaljat-starie-versii-postov-wordpress) — плагин для оптимизации сайта, в том числе умеет отключать ревизии и очищать базу.

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

Как интегрировать автоматическую очистку ревизий в рабочий процесс

Для автоматизации рекомендуется запускать удаление ревизий по расписанию. Можно использовать встроенный WP-Cron или WPClass Cron для более надёжной работы. Настройте задачу, которая раз в день или неделю будет запускать функцию очистки.

Пример регистрации WP-Cron задачи:

function wpclass_schedule_revision_cleanup() {
    if (!wp_next_scheduled('wpclass_revision_cleanup_hook')) {
        wp_schedule_event(time(), 'daily', 'wpclass_revision_cleanup_hook');
    }
}
add_action('wp', 'wpclass_schedule_revision_cleanup');

add_action('wpclass_revision_cleanup_hook', 'wpclass_delete_old_revisions');
<

Таким образом, ваш сайт будет регулярно очищать старые ревизии без вашего вмешательства.

Заключение

Контроль ревизий — важная часть оптимизации WordPress. Используйте ограничение количества ревизий в wp-config.php, а для уже накопленных старых версий применяйте автоматическую очистку через код или плагины. Регулярная очистка поможет поддерживать базу данных в порядке и ускорит работу сайта.

Создание настройки для изменения заголовка страницы в WordPress через админку
09.01.2026
Удаление неиспользуемых атрибутов и метаданных в WooCommerce: практическое руководство
28.04.2026
Как использовать WP GraphQL для эффективного доступа к данным WordPress
21.04.2026
Как сделать автоматический откат обновлений в WordPress при ошибках
12.01.2026
Как установить разные верстки блоков Gutenberg в WordPress
01.01.2026