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

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

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

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

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

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

Как WordPress хранит ревизии постов: технические детали

Ревизии — это особый тип постов с типом revision. В таблице wp_posts они имеют поле post_type = 'revision'. Каждая ревизия связана с основным постом через поле post_parent, которое содержит ID оригинального поста.

Для удаления ревизий достаточно удалить все записи с post_type = 'revision'. Однако для безопасности и точности лучше удалять ревизии, относящиеся только к нужным постам.

Пример PHP функции для удаления старых ревизий

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

function wp24_delete_old_revisions() {
    global $wpdb;
    // Удаляем все ревизии из таблицы wp_posts
    $revisions = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision'");
    if (empty($revisions)) {
        return 'Ревизий для удаления не найдено.';
    }
    foreach ($revisions as $revision_id) {
        wp_delete_post($revision_id, true); // true для полного удаления
    }
    return count($revisions) . ' ревизий успешно удалены.';
}

Вы можете вызвать эту функцию через админский хук, либо через WP-CLI, либо временно добавить вызов в functions.php для однократного удаления.

Добавление вызова функции через WP-CLI

Если у вас есть доступ к WP-CLI, можно выполнить удаление так:

wp eval 'echo wp24_delete_old_revisions();'

Как ограничить количество ревизий в WordPress

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

define('WP_POST_REVISIONS', 5); // сохранять максимум 5 ревизий

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

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

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

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

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

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

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

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

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

Для автоматической очистки ревизий можно добавить WP-Cron задачу, которая будет запускать функцию удаления регулярно. Пример:

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

add_action('wp24_revision_cleanup_hook', 'wp24_delete_old_revisions');

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

Как установить ограничение на регистрацию в WordPress по домену email
10.02.2026
Использование WooCommerce order meta для кастомизированных отчетов
21.05.2026
Как избежать проблем с настройкой статусов заказов в WooCommerce
21.05.2026
Как автоматически удалять пустые категории в WordPress с помощью кода
29.03.2026
Как автоматизировать обновление тем и плагинов в WordPress с помощью кода
17.01.2026