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

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

Что такое ревизии записей и почему их нужно удалять

Ревизии — это автосохранённые версии ваших записей и страниц. По умолчанию WordPress сохраняет каждое изменение как отдельную ревизию, что удобно для восстановления данных. Но если не ограничивать их количество и не очищать старые, то таблица wp_posts (где ревизии хранятся) разрастается, замедляя запросы к базе данных.

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

  • Оптимизировать размер базы данных;
  • Ускорить загрузку административной панели;
  • Повысить общую производительность сайта;
  • Снизить нагрузку на резервное копирование и обслуживание базы данных.

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

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

define('WPTASK_MAX_REVISIONS', 5);

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

Чтобы эта константа работала, её надо определить именно как WP_POST_REVISIONS. Исправленный вариант:

define('WP_POST_REVISIONS', 5);

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

add_filter('wp_revisions_to_keep', function() {
    return defined('WPTASK_MAX_REVISIONS') ? WPTASK_MAX_REVISIONS : 5;
});

Удаление всех старых ревизий через SQL-запрос

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

DELETE FROM wp_posts WHERE post_type = 'revision';

Внимание! Перед выполнением обязательно сделайте резервную копию базы данных.

Этот запрос удалит все ревизии без разбора, что может быть рискованно, если вы хотите сохранить какие-то версии. Лучше предварительно просмотреть количество ревизий:

SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';

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

Чтобы не использовать SQL вручную, можно добавить в файл functions.php вашей темы или создать собственный плагин с такой функцией:

function wptask_delete_old_revisions() {
    global $wpdb;
    $max_revisions = 5; // Максимум ревизий на запись

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

    foreach ($posts as $post_id) {
        // Получаем все ревизии для записи, кроме последних $max_revisions
        $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, $max_revisions
        ));

        if (!empty($revisions)) {
            $ids = implode(',', array_map('intval', $revisions));
            $wpdb->query("DELETE FROM {$wpdb->posts} WHERE ID IN ($ids)");
        }
    }
}

// Запускаем удаление при активации темы или плагина
add_action('after_switch_theme', 'wptask_delete_old_revisions');

Эта функция оставляет для каждой записи не более 5 последних ревизий и удаляет остальные. Вы можете изменить число в переменной $max_revisions.

Как запустить функцию вручную

Чтобы запустить удаление в любое время, можете вызвать функцию напрямую из административной панели через плагин типа Code Snippets или добавить временный вызов в functions.php:

add_action('admin_init', 'wptask_delete_old_revisions');

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

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

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

  • WP-Optimize — популярный плагин для оптимизации базы данных, который умеет удалять ревизии, спам и другие ненужные данные.
  • Delete Revisions — простой плагин специально для удаления ревизий с выбором по дате и количеству.
  • Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wptask.ru&utm_medium=article&utm_campaign=kak-udalit-starye-revizii-zapisej-wordpress) — мощный инструмент для оптимизации WordPress, включая управление ревизиями и отключение ненужных функций.

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

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

После удаления большого количества ревизий таблица wp_posts может оставаться фрагментированной, что снижает производительность. Для оптимизации используйте SQL-запрос:

OPTIMIZE TABLE wp_posts;

Или воспользуйтесь плагинами для оптимизации базы, например, WP-Optimize или Clearfy Pro.

Резюме по оптимизации ревизий

  • Ограничивайте количество ревизий через wp-config.php или фильтры.
  • Регулярно удаляйте старые ревизии с помощью кода или плагинов.
  • Проводите оптимизацию таблиц базы данных после очистки.
  • Используйте проверенные инструменты из https://wpshop.ru с utm-метками для удобства и безопасности.
Как создать автоматическую ответную форму в WordPress
06.01.2026
Как создать автоматические резервные копии WordPress: плагины и код
21.11.2025
Как автоматически отправлять отзывы из WordPress на email
02.03.2026
WooCommerce: как автоматически удалять неоплаченные заказы через cron и код
26.05.2026
Автоматическое удаление неоплаченных заказов в WooCommerce
13.05.2026