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

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

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

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

Накопление ревизий приводит к следующим проблемам:

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

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

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

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

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

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

        if (!empty($old_revisions)) {
            $ids_string = implode(',', array_map('intval', $old_revisions));
            // Удаляем старые ревизии
            $wpdb->query("DELETE FROM {$wpdb->posts} WHERE ID IN ($ids_string)");
        }
    }
}

// Запускаем функцию вручную или по крону
wpaction_delete_old_revisions();

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

Автоматизация удаления ревизий через WP-Cron

Добавим задачу, которая будет запускать очистку раз в неделю:

function wpaction_schedule_revision_cleanup() {
    if (!wp_next_scheduled('wpaction_revision_cleanup_hook')) {
        wp_schedule_event(time(), 'weekly', 'wpaction_revision_cleanup_hook');
    }
}
add_action('wp', 'wpaction_schedule_revision_cleanup');

add_action('wpaction_revision_cleanup_hook', 'wpaction_delete_old_revisions');

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

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

Чтобы ревизии не разрастались бесконтрольно, можно ограничить их число с помощью константы WP_POST_REVISIONS. Добавьте в wp-config.php строку:

define('WP_POST_REVISIONS', 3);

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

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

Если вы не хотите работать с кодом, можно использовать надёжные плагины:

  • Clearfy Pro — в этом плагине есть модуль для управления ревизиями и оптимизации базы данных. Он позволяет быстро удалить все ревизии и настроить лимит их количества.
    Подробнее о Clearfy Pro
  • WP-Optimize — популярный плагин для очистки и оптимизации базы данных, в том числе удаления ревизий.
  • Revision Control — плагин для гибкой настройки количества ревизий и их удаления.

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

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

Выполнить это можно вручную через phpMyAdmin, выполнив SQL-запрос:

OPTIMIZE TABLE wp_posts;

Или программно через PHP:

function wpaction_optimize_posts_table() {
    global $wpdb;
    $wpdb->query('OPTIMIZE TABLE ' . $wpdb->posts);
}
wpaction_optimize_posts_table();

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

Заключение по теме управления ревизиями в WordPress

Удаление старых ревизий и ограничение их количества — важный элемент оптимизации сайта на WordPress. Это помогает уменьшить размер базы данных, повысить скорость работы и улучшить стабильность. Используйте приведённые выше методы: автоматизированное удаление через WP-Cron, ограничение числа ревизий в wp-config.php и плагины Clearfy Pro или WP-Optimize для удобства и безопасности.

Регулярная очистка и оптимизация базы данных — залог быстрого и надёжного сайта без лишнего мусора.

Как создать собственный вид записей в WordPress
25.11.2025
Как создать автоматические сборки контента в WordPress
01.03.2026
Как удалить неиспользуемые медиафайлы в WordPress
02.12.2025
Как создать автоматические уведомления в WordPress с помощью WPRemark
17.02.2026
Как установить охранные роли в WordPress для доступа к административной панели
09.03.2026