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

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

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

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

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

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

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

Для автоматического удаления черновиков старше определенного количества дней можно использовать wp-cron и кастомную функцию. Ниже пример кода, который удаляет черновики старше 30 дней:

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

    // Получаем ID черновиков старше пороговой даты
    $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 $draft_id) {
            wp_delete_post($draft_id, true); // Безопасное удаление с обходом корзины
        }
    }
}

// Регистрируем событие wp-cron на ежедневный запуск
if (!wp_next_scheduled('wpnote_daily_delete_old_drafts')) {
    wp_schedule_event(time(), 'daily', 'wpnote_daily_delete_old_drafts');
}

add_action('wpnote_daily_delete_old_drafts', 'wpnote_delete_old_drafts');

Этот код добавляет в WordPress ежедневное задание, которое автоматически удаляет все черновики, не изменявшиеся более 30 дней. Вы можете изменить значение переменной $days под свои требования.

Где добавить этот код?

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

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

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

1. WP Bulk Delete

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

Как настроить:

  • Установите и активируйте WP Bulk Delete.
  • Перейдите в раздел Bulk WP > Bulk Delete Posts.
  • Выберите фильтр по статусу "Draft" и укажите дату создания/изменения.
  • Настройте периодические задачи для автоматизации.

Подробнее и загрузить плагин можно на WPSHOP.

2. Clearfy Pro

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

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

  • Удобный интерфейс для настройки автоматической очистки.
  • Поддержка очистки различных типов данных.
  • Минимальное влияние на производительность.

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

Расширение функционала: уведомления об удалении черновиков

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

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

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

    if (!empty($drafts)) {
        $deleted_titles = [];
        foreach ($drafts as $draft_id) {
            $post = get_post($draft_id);
            $deleted_titles[] = $post->post_title;
            wp_delete_post($draft_id, true);
        }

        $to = get_option('admin_email');
        $subject = 'Автоматическое удаление старых черновиков';
        $message = "Удалены следующие черновики старше $days дней:\n" . implode("\n", $deleted_titles);
        wp_mail($to, $subject, $message);
    }
}

// Регистрация события wp-cron
if (!wp_next_scheduled('wpnote_daily_delete_old_drafts_notify')) {
    wp_schedule_event(time(), 'daily', 'wpnote_daily_delete_old_drafts_notify');
}
add_action('wpnote_daily_delete_old_drafts_notify', 'wpnote_delete_old_drafts_with_notification');

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

Заключение

Автоматическое удаление старых черновиков — простое, но важное улучшение для любого сайта на WordPress. Вы можете выбрать решение на основе кода, если любите кастомные настройки, или воспользоваться готовыми плагинами, такими как WP Bulk Delete или Clearfy Pro. В любом случае регулярная чистка базы данных повысит скорость и стабильность вашего сайта.

Как использовать WPRemark для автоматического размещения отзывов в WordPress
08.01.2026
WooCommerce: не отображаются атрибуты товара на странице — как исправить
12.05.2026
Как избежать конфликтов плагинов в WordPress: практические решения и советы
15.12.2025
Как создать свой плагин для WooCommerce: пошаговое руководство
28.11.2025
Как использовать REST API для получения данных в WordPress
05.12.2025