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

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

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

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

Избыточное количество ревизий:

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

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

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

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

define('WPFRONT_LIMIT_POST_REVISIONS', 5);

Замените WPFRONT_LIMIT_POST_REVISIONS на стандартный константный ключ WordPress WP_POST_REVISIONS, если хотите применить универсальное ограничение:

define('WP_POST_REVISIONS', 5);

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

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

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

DELETE FROM wp_posts WHERE post_type = 'revision';

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

Удаление всех ревизий с помощью PHP-скрипта

Ниже пример функции для удаления всех ревизий через WP_Query и wp_delete_post(), который безопаснее и запускает все хуки:

function wpfront_delete_all_revisions() {
    $revisions = new WP_Query(array(
        'post_type'      => 'revision',
        'posts_per_page' => -1,
        'fields'         => 'ids'
    ));

    foreach ($revisions->posts as $revision_id) {
        wp_delete_post($revision_id, true);
    }
}

Вы можете вызвать wpfront_delete_all_revisions() один раз, например, через плагин Code Snippets или в functions.php, а после удаления закомментировать вызов.

Удаление старых ревизий, оставляя последние N версий

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

function wpfront_trim_post_revisions($keep = 3) {
    global $wpdb;
    $post_ids = $wpdb->get_col("SELECT DISTINCT post_parent FROM {$wpdb->posts} WHERE post_type = 'revision'");

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

        if (count($revisions) > $keep) {
            $to_delete = array_slice($revisions, $keep);
            foreach ($to_delete as $revision_id) {
                wp_delete_post($revision_id, true);
            }
        }
    }
}

Вызывайте wpfront_trim_post_revisions(3), чтобы оставить по 3 ревизии на запись.

Плагины для управления ревизиями

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

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

Рекомендации по безопасности и бэкапу

Перед удалением ревизий обязательно сделайте резервную копию базы данных. Любые манипуляции с базой могут привести к потере данных, если что-то пойдёт не так. Используйте проверенные методы и тестируйте на тестовом сайте перед применением на продакшене.

Также рекомендуем использовать WPFront Custom Post Types или Expert Review для организации контента, если ваш сайт содержит много информации, требующей версионности и ревизий.

Как создать собственный виджет в WordPress с примером кода
21.11.2025
WooCommerce: автоматическое отключение вариантов доставки при отсутствии товаров на складе
11.05.2026
Как отключить и удалить pings (pingbacks и trackbacks) в WordPress для защиты от спама
06.03.2026
WooCommerce: как автоматически изменять ставку НДС при продаже товаров
01.06.2026
Как добавить автоматическое удаление спама в комментариях WordPress
29.01.2026