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

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

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

Черновики — это записи с типом post_status = 'draft'. Они не публикуются, но сохраняются в базе данных. Если вы регулярно не очищаете их, со временем количество таких записей может достигать сотен и даже тысяч, особенно на крупных сайтах с несколькими авторами. Это приводит к нескольким проблемам:

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

Решение — автоматизация удаления черновиков, которым больше определённого времени.

Как определить, какие черновики удалять

В большинстве случаев разумно удалять черновики, которые не редактировались и не обновлялись более 30-60 дней назад. Можно ориентироваться на дату последнего изменения записи — поле post_modified в базе данных.

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

Дополнительные критерии для удаления

  • Удалять черновики только определённых типов записей, например, post или page.
  • Исключать из удаления черновики, созданные определёнными пользователями или с определёнными метками.

В зависимости от специфики сайта эти фильтры можно добавить в скрипт.

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

Добавим в файл functions.php вашей темы или в кастомный плагин следующий код. Он будет запускаться по расписанию и удалять черновики старше 30 дней:

function cyrtolat_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('cyrtolat_daily_delete_old_drafts')) {
    wp_schedule_event(time(), 'daily', 'cyrtolat_daily_delete_old_drafts');
}

// Хук для запуска удаления
add_action('cyrtolat_daily_delete_old_drafts', 'cyrtolat_delete_old_drafts');

Этот код:

  • Определяет дату, старше которой черновики будут удаляться;
  • Получает список ID черновиков по дате изменения;
  • Удаляет их безвозвратно;
  • Создаёт ежедневное событие для автоматического запуска.

Такой подход не требует установки дополнительных плагинов и работает эффективно.

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

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

1. WP-Optimize

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

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

  • Простой интерфейс;
  • Дополнительные функции оптимизации;
  • Регулярное обновление.

2. Advanced Database Cleaner

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

3. Clearfy Pro

Плагин из категории WPShop с расширенными возможностями оптимизации и безопасности. Включает опции для автоматического удаления старых черновиков и других мусорных данных.

Подробнее о Clearfy Pro на wpshop.ru.

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

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

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

Расширенное удаление с фильтрами и логированием

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

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

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

    foreach ($drafts as $draft) {
        // Например, исключаем автора с ID 1
        if ($draft->post_author == 1) {
            continue;
        }
        wp_delete_post($draft->ID, true);
        error_log("[cyrtolat] Deleted draft ID: {$draft->ID}, Title: {$draft->post_title}");
    }
}

add_action('cyrtolat_daily_delete_old_drafts', 'cyrtolat_delete_old_drafts_advanced');

Логирование в error_log поможет контролировать процесс удаления.

Выводы

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как добавить динамические метаданные в WordPress для улучшения SEO
22.01.2026
WooCommerce: автоматическое изменение цены товара при обновлении заказа
25.05.2026
Как устроить автоматический перевод контента в WordPress: практическое руководство
06.03.2026
Как использовать AJAX в WordPress без плагинов: практические решения
16.12.2025
WooCommerce: автоматическое изменение цены товара при обновлении заказа
25.04.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее