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

База данных WordPress со временем накапливает множество ненужных записей: ревизии постов, автосохранения, спам-комментарии, временные опции и другие «мусорные» данные. Это замедляет работу сайта и увеличивает размер бэкапов. В этой статье разберём, как автоматизировать очистку базы данных, используя кастомные функции и плагины, а также как настроить регулярное выполнение очистки.

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

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

  • Увеличению размера базы данных;
  • Замедлению запросов и загрузки страниц;
  • Увеличению времени создания и восстановления бэкапов;
  • Повышенному риску ошибок при обновлениях.

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

Основные типы мусорных данных в базе данных WordPress

Чтобы грамотно автоматизировать очистку, нужно понимать, какие данные считать мусорными:

  • Ревизии (post revisions) — предыдущие версии записей и страниц.
  • Автосохранения (autosaves) — временные черновики, создаваемые при редактировании.
  • Спам и корзина комментариев — нежелательные отзывы и удалённые комментарии.
  • Временные опции (transients) — кэшированные данные с временем жизни.
  • Мусорные записи в метах и опциях — устаревшие или неиспользуемые данные.

Все эти данные можно безопасно удалять, чтобы разгрузить базу.

Как ограничить количество ревизий и удалять старые автоматически

Для начала стоит ограничить число ревизий, которые WordPress хранит для каждой записи. Это делается через wp-config.php:

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

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

function wplog_delete_old_revisions() {
    global $wpdb;
    $wpdb->query("DELETE FROM $wpdb->posts WHERE post_type = 'revision'");
}
add_action('wp_scheduled_delete', 'wplog_delete_old_revisions');

Эта функция удалит все ревизии при срабатывании стандартного события wp_scheduled_delete, которое вызывается раз в день. Можно также запускать её вручную для разовой очистки.

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

Автосохранения — это черновики, которые WordPress сохраняет автоматически. Они тоже занимают место, но обычно старые автосохранения удаляются автоматически. Если хотите, можно очистить их через запрос:

function wplog_delete_autosaves() {
    global $wpdb;
    $wpdb->query("DELETE FROM $wpdb->posts WHERE post_type = 'autosave'");
}
add_action('wp_scheduled_delete', 'wplog_delete_autosaves');

Автоматическая очистка спама и мусорных комментариев

Спам-комментарии и комментарии из корзины тоже нужно регулярно удалять для оптимизации базы. WordPress имеет встроенную функцию wp_delete_comment(), но для массового удаления можно использовать следующий код:

function wplog_clean_spam_and_trash_comments() {
    global $wpdb;
    $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_approved = 'spam'");
    $wpdb->query("DELETE FROM $wpdb->comments WHERE comment_approved = 'trash'");
}
add_action('wp_scheduled_delete', 'wplog_clean_spam_and_trash_comments');

Эта функция удалит все спам и корзину комментариев при ежедневной очистке.

Удаление устаревших временных опций (transients)

Временные опции (transients) — это кэшированные данные с ограниченным сроком жизни. Иногда они не удаляются автоматически (например, из-за ошибок плагинов). Чтобы очистить их вручную, можно использовать запрос:

function wplog_delete_expired_transients() {
    global $wpdb;
    $time = time();
    $wpdb->query(
        $wpdb->prepare(
            "DELETE FROM $wpdb->options WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%' AND option_id IN (
                SELECT option_id FROM $wpdb->options AS o2 WHERE option_name LIKE '_transient_timeout_%' AND option_value < %d
            )",
            $time
        )
    );
}
add_action('wp_scheduled_delete', 'wplog_delete_expired_transients');
<

Эта функция удалит все просроченные транзиенты из базы.

Настройка автоматического запуска очистки с WP Cron

Чтобы автоматизировать очистку, нужно зарегистрировать и запланировать событие в WordPress Cron:

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

add_action('wplog_database_cleanup_event', 'wplog_run_database_cleanup');

function wplog_run_database_cleanup() {
    wplog_delete_old_revisions();
    wplog_delete_autosaves();
    wplog_clean_spam_and_trash_comments();
    wplog_delete_expired_transients();
}

// Для отмены расписания вызовите wp_clear_scheduled_hook('wplog_database_cleanup_event');

Таким образом, очистка будет запускаться ежедневно без вашего участия.

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

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

  • Clearfy Pro — оптимизация и очистка базы, кэш, отключение ненужных функций.
  • WP-Optimize — популярный плагин для очистки базы и оптимизации таблиц.
  • WP-DBManager — управление базой, оптимизация, бэкапы и очистка.

Используйте плагины с осторожностью и всегда делайте резервные копии перед массовыми очистками.

Дополнительные советы по поддержанию базы данных в порядке

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

  • Ограничить количество ревизий через wp-config.php.
  • Регулярно обновлять WordPress, темы и плагины для исправления багов.
  • Проверять настройки плагинов, которые создают много временных данных.
  • Настроить мониторинг производительности и базы данных.

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

Как автоматически создавать миниатюры для картинок в WordPress
23.12.2025
Настройка автопубликации постов в WordPress
30.12.2025
Как автоматизировать очистку базы данных WordPress от мусорных записей
10.12.2025
Как сделать собственный виджет в WordPress с примером кода
07.12.2025
Как использовать хуки в WordPress для автоматизации задач
21.11.2025