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

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

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

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

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

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

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

SELECT post_type, COUNT(*) AS revisions_count
FROM wp_posts
WHERE post_type = 'revision'
GROUP BY post_type;

Если в результате вы видите большое число, стоит задуматься об очистке.

Удаление ревизий с помощью SQL-запроса

Самый простой и быстрый способ — выполнить запрос, который удалит все ревизии:

DELETE FROM wp_posts WHERE post_type = 'revision';

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

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

Ниже пример функции wpscan_delete_old_revisions(), которая оставляет в базе не более указанного количества ревизий для каждого поста и удаляет остальные.

function wpscan_delete_old_revisions($max_revisions = 3) {
    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) {
        // Получаем ревизии для поста, кроме последних $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 1000 OFFSET %d",
            $post_id, $max_revisions
        ));

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

// Запускаем функцию
wpscan_delete_old_revisions(3);

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

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

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

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

add_action('wpscan_revision_cleanup_event', function() {
    wpscan_delete_old_revisions(3);
});

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

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

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

  • WP-Sweep — удобный инструмент для очистки ревизий, спама, удаленных комментариев и прочего мусора.
  • Clearfy Pro — расширенный функционал оптимизации, в том числе управление ревизиями и настройками автосохранения.

Оба плагина доступны для загрузки на wpshop.ru с удобной поддержкой.

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

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

define('WP_POST_REVISIONS', 3);

Это позволит сохранять не более 3 ревизий для каждого поста.

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

Выводы и рекомендации

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

Если хотите более продвинутые возможности оптимизации и настройки, обратите внимание на плагин Clearfy Pro, который существенно упростит управление производительностью вашего сайта.

Как отключить Emoji в WordPress для ускорения сайта и уменьшения нагрузки
24.02.2026
Аудит и настройка прав доступа к файлам WordPress
15.04.2026
Как удалить старые версии постов в WordPress с помощью кода
27.12.2025
Как защитить WordPress от прохождения по слухам и сидтам: практические методы и кодовые решения
15.02.2026
Как удалить заблокированные или замедленные заказы WooCommerce с помощью кода
01.05.2026