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

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

Почему важно удалять старые ревизии записей в WordPress

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

  • Увеличению размера базы данных — что сказывается на скорости резервного копирования и общем быстродействии.
  • Замедлению запросов к таблице wp_posts, где хранятся ревизии.
  • Увеличению нагрузки сервера при бэкапах и оптимизации базы.

Ручное удаление ревизий возможно через SQL-запросы, но это неудобно и рискованно. Гораздо лучше автоматизировать процесс с помощью WP-Cron и собственного PHP кода.

Настройка автоматического удаления ревизий с помощью WP-Cron

WP-Cron — встроенный планировщик задач в WordPress, который выполняет функции по расписанию. Мы создадим функцию, которая будет удалять ревизии старше определённого срока, и зарегистрируем её в WP-Cron.

Для начала добавим в файл functions.php вашей темы или в собственный плагин следующий код:

function wpfix_delete_old_revisions() {
    global $wpdb;
    // Определяем возраст ревизий в днях для удаления
    $days = 30;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    // Получаем ID ревизий старше пороговой даты
    $old_revisions = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_modified < %s",
        $date_threshold
    ));

    if (!empty($old_revisions)) {
        foreach ($old_revisions as $revision_id) {
            wp_delete_post($revision_id, true); // Полное удаление
        }
    }
}

// Регистрируем событие, если оно ещё не существует
if (!wp_next_scheduled('wpfix_cron_delete_old_revisions')) {
    wp_schedule_event(time(), 'daily', 'wpfix_cron_delete_old_revisions');
}

// Хук для выполнения функции
add_action('wpfix_cron_delete_old_revisions', 'wpfix_delete_old_revisions');

Этот код делает следующее:

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

Как проверить и отладить работу WP-Cron

WP-Cron запускается при посещении сайта, поэтому если трафик низкий, задачи могут не выполняться вовремя. Для проверки и управления задачами можно использовать плагин WP Crontrol.

  • Установите и активируйте плагин WP Crontrol.
  • Перейдите в меню Инструменты > Cron Events.
  • Найдите событие wpfix_cron_delete_old_revisions и проверьте дату его следующего запуска.
  • Можно запустить событие вручную для теста.

Если сайт малопосещаемый, для надежности можно настроить системный cron сервера, вызывающий wp-cron.php по расписанию.

Дополнительные советы по управлению ревизиями в WordPress

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

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

define('WP_POST_REVISIONS', 5); // Хранить не более 5 ревизий для каждой записи

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

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

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

  • WP-Sweep — позволяет очищать ревизии, авточерновики, спам-комментарии и оптимизировать базу.
  • Optimize Database after Deleting Revisions — автоматизирует удаление ревизий и оптимизацию таблиц.

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

Резюме

Автоматическое удаление старых ревизий через WP-Cron — это эффективный способ поддерживать базу данных WordPress в оптимальном состоянии. Пишем простую функцию, регистрируем крон-событие, и база данных не будет раздуваться бесконтрольно. Это особенно актуально для сайтов с активным редактированием контента. К тому же, такой подход легко адаптировать под свои нужды — изменить период удаления, добавить логирование и уведомления.

Как использовать мета-заголовки для SEO в WordPress
20.01.2026
Как правильно использовать nonce в WordPress для безопасности
22.11.2025
Как использовать WPCommunity для создания внутреннего интранета на WordPress
10.02.2026
Как использовать WPCommunity для создания внутреннего форума на WordPress
23.01.2026
Как избежать проблем с использованием AJAX в WordPress
12.12.2025