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

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

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

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

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

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

Один из простых способов контролировать количество ревизий — задать лимит в файле wp-config.php. Например, чтобы хранить не более 3 ревизий для каждой записи, добавьте в этот файл следующую строку:

define('WP_POST_REVISIONS', 3);

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

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

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

function wpunit_delete_old_revisions() {
    global $wpdb;
    $days = 30; // Удалять ревизии старше 30 дней
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $revisions = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_modified < %s",
        $date_threshold
    ));

    if (!empty($revisions)) {
        foreach ($revisions as $revision_id) {
            wp_delete_post($revision_id, true);
        }
    }
}

// Добавляем задачу в wp_cron для запуска ежедневно
if (!wp_next_scheduled('wpunit_daily_revision_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpunit_daily_revision_cleanup');
}
add_action('wpunit_daily_revision_cleanup', 'wpunit_delete_old_revisions');

Этот код выполняет следующие задачи:

  • Определяет дату, старше которой ревизии считаются устаревшими (30 дней).
  • Получает ID всех ревизий, которые были изменены до этой даты.
  • Удаляет каждую найденную ревизию с помощью функции wp_delete_post, передавая true для полного удаления без перемещения в корзину.
  • Регистрирует задачу в WP-Cron, которая будет запускать функцию очистки ежедневно.

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

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

WP Rocket

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

Clearfy Pro

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

WP-Sweep

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

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

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

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

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

Помимо удаления старых ревизий и ограничения их количества, можно применять следующие практики:

  • Отключать ревизии для отдельных типов постов, например, для страниц или пользовательских типов контента.
  • Использовать плагины кеширования и оптимизации базы данных для снижения нагрузки.
  • Планировать регулярные задачи очистки через WP-Cron, как показано в примере выше.

Отключение ревизий для страниц

Если вы хотите отключить ревизии для страниц, добавьте в functions.php такой код:

function wpunit_disable_revisions_for_pages( $enabled, $post ) {
    if ( 'page' === $post->post_type ) {
        return false;
    }
    return $enabled;
}
add_filter( 'wp_revisions_to_keep', 'wpunit_disable_revisions_for_pages', 10, 2 );

Этот фильтр отключит создание ревизий для страниц, сохраняя их только для записей и других типов постов.

Итоги

Автоматическое удаление старых ревизий — эффективный способ поддерживать базу данных WordPress в оптимальном состоянии. Используя код из примера, можно настроить регулярную очистку с помощью WP-Cron, а также ограничить количество ревизий через wp-config.php.

Для более удобного управления стоит рассмотреть плагины, такие как Clearfy Pro или WP-Sweep.

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

Как правильно отключить AJAX в WooCommerce без конфликтов
26.04.2026
Как удалить заказ WooCommerce без удаления пользователя
24.05.2026
Автоматическое удаление старых мультимедиа в WordPress: практические решения
12.04.2026
Оптимальное использование хуков для отложенного запуска кода в WordPress
21.05.2026
Как использовать REST API в WordPress для создания кастомных решений
22.11.2025