Оптимизация базы данных WordPress: удаление старых черновиков

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

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

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

  • Замедлению работы административной панели из-за большого объема данных.
  • Увеличению времени резервного копирования сайта.
  • Росту размера базы данных и, как следствие, стоимости хостинга при использовании платных тарифов.

Удаление старых черновиков и ревизий — важный шаг для оптимизации сайта.

Использование плагинов для автоматической очистки базы

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

1. WP-Optimize

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

Преимущества:

  • Автоматическая очистка по расписанию.
  • Оптимизация таблиц базы данных.
  • Простая настройка через админку.

2. Advanced Database Cleaner

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

Преимущества:

  • Гибкие настройки удаления.
  • Возможность планирования задач.
  • Отдельная очистка для разных типов данных.

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

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

Пример функции для удаления автосохраненных черновиков старше 30 дней

function wpfaq_delete_old_autosaves() {
    global $wpdb;
    $days = 30;
    $cutoff_date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $autosaves = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_modified < %s",
        $cutoff_date
    ));

    foreach ($autosaves as $post_id) {
        wp_delete_post($post_id, true);
    }
}

// Регистрируем событие WP-Cron для ежедневного запуска
if (!wp_next_scheduled('wpfaq_daily_autosave_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpfaq_daily_autosave_cleanup');
}

add_action('wpfaq_daily_autosave_cleanup', 'wpfaq_delete_old_autosaves');

Данная функция получает ID всех ревизий, которые старше 30 дней, и удаляет их без возможности восстановления.

Расширение функции: удаление черновиков (post_status = 'draft')

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

function wpfaq_delete_old_drafts_and_autosaves() {
    global $wpdb;
    $days = 30;
    $cutoff_date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $old_posts = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE (post_status = 'draft' OR post_type = 'revision') AND post_modified < %s",
        $cutoff_date
    ));

    foreach ($old_posts as $post_id) {
        wp_delete_post($post_id, true);
    }
}

add_action('wpfaq_daily_autosave_cleanup', 'wpfaq_delete_old_drafts_and_autosaves');

Настройка частоты и уведомлений

WP-Cron запускается только при посещениях сайта, поэтому для сайтов с низкой посещаемостью стоит настроить системный cron на вызов wp-cron.php. Это обеспечит регулярное выполнение задач.

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

Советы по безопасности и тестированию

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

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

Заключение

Оптимизация базы данных WordPress за счёт удаления старых автосохраняемых черновиков и ревизий — простой и эффективный способ ускорить работу сайта и снизить нагрузку на сервер. Вы можете использовать готовые плагины, такие как WP-Optimize или Advanced Database Cleaner, либо написать собственное решение с использованием приведённого примера кода.

Как отключить AJAX в WooCommerce без потери функциональности
08.12.2025
WooCommerce: как автоматически удалять товары без склада из каталога
16.06.2026
WooCommerce: решение проблемы с отображением товаров после обновления кеша
11.05.2026
Как автоматически очистить базу данных от старых transient-опций в WordPress
09.03.2026
Как установить ограничения на регистрацию в WordPress по домену email
24.01.2026