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

Диагностика проблемы: зачем удалять старые версии записей WordPress

WordPress по умолчанию сохраняет каждое изменение записи как отдельную версию (ревизию). Это удобно для восстановления, но при большом объёме контента приводит к раздуванию базы данных, замедлению сайта и росту размера бэкапов. Особенно актуально для сайтов с частыми правками и большим числом постов.

Чтобы проверить, сколько ревизий хранится, выполните SQL-запрос через phpMyAdmin или wp-cli:

SELECT post_parent, COUNT(*) AS revisions_count FROM wp_posts WHERE post_type = 'revision' GROUP BY post_parent ORDER BY revisions_count DESC LIMIT 20;

Этот запрос покажет 20 записей с максимальным количеством ревизий.

Пошаговое решение: удаляем старые версии записей без потери данных

1. Создание резервной копии

Перед любыми операциями с базой данных обязательно сделайте полный бэкап.

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

Самый быстрый способ - удалить все ревизии напрямую из базы данных:

DELETE FROM wp_posts WHERE post_type = 'revision';

Но это удалит все версии, включая последние. Если нужно оставить определённое количество версий, используйте следующий вариант.

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

Пример кода на PHP, который удаляет все ревизии, кроме последних трёх каждой записи:

function delete_old_revisions($keep = 3) {
    global $wpdb;
    $sql = "SELECT ID FROM ( 
        SELECT ID, post_parent, 
        ROW_NUMBER() OVER (PARTITION BY post_parent ORDER BY post_date DESC) as rn 
        FROM {$wpdb->posts} WHERE post_type = 'revision'
    ) t WHERE rn > %d";

    $revisions_to_delete = $wpdb->get_col($wpdb->prepare($sql, $keep));

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

add_action('init', function() { delete_old_revisions(3); });

Обратите внимание: функция ROW_NUMBER() поддерживается в MySQL 8+. Для более старых версий нужно использовать альтернативные методы, например, через PHP выборку и фильтрацию.

4. Отключение автоматического сохранения ревизий

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

define('WP_POST_REVISIONS', 3);

Либо полностью отключите ревизии (не рекомендуется):

define('WP_POST_REVISIONS', false);

Проверка результата после удаления ревизий

  • Повторите SQL-запрос из раздела диагностики, чтобы убедиться, что ревизии удалены или их число ограничено.
  • Проверьте размер таблицы wp_posts и общий размер базы данных, они должны уменьшиться.
  • Убедитесь, что последние версии ваших записей доступны и корректны в админке.
  • Проверьте работу сайта: нет ли ошибок при редактировании записей и сохранении новых версий.

Частые ошибки и как их исправить

  • Удаление ревизий не уменьшило размер базы: возможно, таблица wp_posts не была оптимизирована после удаления. Выполните в phpMyAdmin команду OPTIMIZE TABLE wp_posts; для освобождения места.
  • Ошибка SQL при использовании ROW_NUMBER(): версия MySQL ниже 8.0. Используйте обходные пути через PHP или плагины.
  • Ревизии продолжают накапливаться: пропущено ограничение в wp-config.php или оно переопределяется плагинами/темой. Проверьте конфликты.
  • Потеря нужных версий: всегда делайте бэкап перед удалением, можно сначала экспортировать ревизии через SQL.

Практические советы по безопасности и производительности

  • Всегда создавайте резервные копии перед изменением базы данных.
  • Используйте WP-CLI для массовых операций, например, для удаления ревизий: wp post delete $(wp post list --post_type='revision' --format=ids) — быстро и безопасно.
  • Регулярно оптимизируйте базу данных с помощью плагинов типа Clearfy Pro (ссылка), чтобы удалять мусор и улучшать производительность.
  • Ограничение числа ревизий уменьшает нагрузку на базу и ускоряет бэкапы.
  • Для крупных сайтов настройте автоматическое удаление старых ревизий через WP-Cron, чтобы поддерживать базу в порядке.

Сравнение способов удаления ревизий в WordPress

МетодОписаниеПлюсыМинусы
SQL-запросыУдаление ревизий напрямую из базыОчень быстро, полный контрольРиск ошибок, требует бэкапа, требует прав доступа к базе
PHP-скриптыУдаление с фильтрацией и логикойГибко, можно оставить последние версииМедленнее, требует правильной реализации
WP-CLIКоманды в консоли для удаления ревизийУдобно для разработчиков, быстроТребует доступа к серверу и WP-CLI
Плагины (Clearfy Pro и другие)Готовые инструменты для очистки базыПросто использовать, безопасноМожет быть платным, меньше контроля

Скачать WP с оф. сайта Магазин проверенных платных тем