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

Одной из часто возникающих проблем при работе с WordPress является раздувание базы данных из-за большого количества автосохранений (autosave) и ревизий записей (post revisions). Это может негативно влиять на производительность сайта и увеличивать размер базы данных, что особенно заметно на больших ресурсах. В этой статье разберём, как безопасно и эффективно удалить автосохранения и ревизии из базы данных WordPress, а также приведём полезные примеры кода и рекомендации по автоматизации процесса.

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

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

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

Поэтому периодическая очистка базы от лишних ревизий и автосохранений — хорошая практика для ускорения сайта и оптимизации базы.

Удаление автосохранений и ревизий через SQL-запросы

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

Удаление автосохранений

Автосохранения имеют мета-ключ _wp_autosave, но проще ориентироваться по типу записи и статусу:

DELETE FROM wp_posts WHERE post_type = 'revision' AND post_status = 'inherit' AND post_content LIKE '%autosave%';

Однако более надежный вариант — удалить все ревизии с флагом автосохранения в метаданных:

DELETE p FROM wp_posts p
LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id AND pm.meta_key = '_wp_autosave'
WHERE p.post_type = 'revision' AND pm.post_id IS NOT NULL;

Удаление всех ревизий

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

DELETE FROM wp_posts WHERE post_type = 'revision';

Это удалит все ревизии и освободит место.

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

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

function wp0_delete_revisions_and_autosaves() {
    global $wpdb;
    // Удаляем автосохранения
    $wpdb->query("DELETE p FROM {$wpdb->posts} p
        LEFT JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND pm.meta_key = '_wp_autosave'
        WHERE p.post_type = 'revision' AND pm.post_id IS NOT NULL");

    // Удаляем все остальные ревизии
    $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
}

// Пример вызова функции через action
add_action('admin_init', 'wp0_delete_revisions_and_autosaves');

Эту функцию можно расширить, чтобы она запускалась по запросу или через WP-Cron, чтобы не нагружать сервер в пиковые часы.

Плагины для управления ревизиями и очистки базы

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

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

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

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

define('WP_POST_REVISIONS', 3); // Хранить не более 3 ревизий

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

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

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

Чтобы база данных не раздувалась, советую:

  • Ограничить количество ревизий через wp-config.php.
  • Периодически удалять старые ревизии и автосохранения вручную или автоматизировать процесс с помощью WP-Cron и собственного кода.
  • Использовать специализированные плагины, например, Clearfy Pro, которые совмещают очистку базы и другие оптимизации.
  • Регулярно делать бэкапы базы перед очистками, чтобы избежать потери данных.

Наш каталог плагинов WordPress