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

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

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

Накопление большого количества черновиков ведет к нескольким проблемам:

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

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

Автоматическое удаление старых черновиков с помощью кастомного кода

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

Создаем функцию удаления черновиков

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

function wpkit_delete_old_drafts() {
    global $wpdb;
    $days = 30; // количество дней
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $drafts = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_status = 'draft' AND post_modified < %s",
        $date_threshold
    ));

    if (!empty($drafts)) {
        foreach ($drafts as $post_id) {
            wp_delete_post($post_id, true); // true — удаление без возможности восстановления
        }
    }
}
// Запускаем функцию раз в сутки
if (!wp_next_scheduled('wpkit_daily_delete_old_drafts')) {
    wp_schedule_event(time(), 'daily', 'wpkit_daily_delete_old_drafts');
}
add_action('wpkit_daily_delete_old_drafts', 'wpkit_delete_old_drafts');

Код делает следующее:

  • Определяет дату 30 дней назад.
  • Получает ID всех черновиков, которые не менялись дольше 30 дней.
  • Удаляет каждый из них без помещения в корзину.
  • Настраивает запуск функции один раз в сутки через WP Cron.

Вы можете изменить значение $days по своему усмотрению.

Как отключить автоматическое удаление

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

function wpkit_clear_delete_old_drafts_cron() {
    $timestamp = wp_next_scheduled('wpkit_daily_delete_old_drafts');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpkit_daily_delete_old_drafts');
    }
}

Использование плагинов для удаления старых черновиков

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

1. WP Rocket

Хотя WP Rocket — это плагин для кэширования, он включает функцию очистки базы данных, которая позволяет удалять старые ревизии и черновики. Для активации:

  • Перейдите в «Настройки» → «WP Rocket» → «База данных».
  • Выберите «Удалить все черновики» или «Удалить старые черновики».
  • Настройте периодичность очистки.

Подробнее: WP Rocket на WPSHOP

2. Clearfy Pro

Clearfy Pro — многофункциональный плагин для оптимизации WordPress, включая очистку базы данных. Он позволяет удалять неиспользуемые черновики по расписанию.

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

Подробнее: Clearfy Pro на WPSHOP

Советы по безопасному удалению черновиков

Перед тем как запускать автоматическое удаление, учтите следующие рекомендации:

  • Резервное копирование базы данных. Это защитит от случайной потери важных данных.
  • Тестирование на тестовом сайте. Проверьте работу функции удаления, чтобы убедиться, что нужные записи не удаляются.
  • Настройка периодичности. Чаще всего достаточно удаления раз в неделю или месяц.
  • Логирование действий. Для отладки можно добавить запись в лог при удалении постов.

Пример добавления логирования

function wpkit_delete_old_drafts_with_log() {
    global $wpdb;
    $days = 30;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $drafts = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_status = 'draft' AND post_modified < %s",
        $date_threshold
    ));

    if (!empty($drafts)) {
        foreach ($drafts as $post_id) {
            if (wp_delete_post($post_id, true)) {
                error_log("[WPKit] Удален черновик с ID: " . $post_id);
            }
        }
    }
}
add_action('wpkit_daily_delete_old_drafts', 'wpkit_delete_old_drafts_with_log');

Заключение

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

Динамические шорткоды с параметрами в WordPress: создание и применение
15.03.2026
Как удалить неиспользуемые мета данные в WordPress для оптимизации базы
18.03.2026
WooCommerce: как использовать хуки для автоматического изменения стоимости товаров
07.07.2026
Как отключить XML-RPC в WordPress для повышения безопасности
25.03.2026
Как сделать многоязычный сайт на WordPress с помощью Polylang
22.03.2026