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

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

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

Черновики — это записи, которые не опубликованы и находятся в статусе «draft». При активной работе над сайтом их может накопиться очень много, особенно если редакторы часто создают и не публикуют записи. Вот почему стоит регулярно очищать базу от ненужных данных:

  • Оптимизация базы данных: меньше записей — быстрее запросы и уменьшение размера БД;
  • Улучшение производительности: менее загруженный WP-Cron и админка работают быстрее;
  • Упрощение управления контентом: в админке не нужно просматривать сотни устаревших черновиков.

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

Автоматическое удаление черновиков через WP-Cron

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

Регистрация кастомного события WP-Cron

function wpkit_schedule_delete_old_drafts() {
    if ( ! wp_next_scheduled( 'wpkit_delete_old_drafts_hook' ) ) {
        // Запуск раз в сутки
        wp_schedule_event( time(), 'daily', 'wpkit_delete_old_drafts_hook' );
    }
}
add_action( 'wp', 'wpkit_schedule_delete_old_drafts' );

Эта функция регистрирует событие, которое запускается ежедневно и вызывает хук wpkit_delete_old_drafts_hook.

Функция удаления старых черновиков

function wpkit_delete_old_drafts() {
    global $wpdb;
    $days = 30; // Удалять черновики старше 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_date < %s",
        $date_threshold
    ) );

    if ( ! empty( $drafts ) ) {
        foreach ( $drafts as $draft_id ) {
            wp_delete_post( $draft_id, true ); // true — удаление без возможности восстановления
        }
    }
}
add_action( 'wpkit_delete_old_drafts_hook', 'wpkit_delete_old_drafts' );

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

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

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

  • WP-Optimize — популярный плагин для оптимизации БД, в том числе удаления ревизий, спама, автоматического удаления старых черновиков;
  • Clearfy Pro — расширенный инструмент для оптимизации и очистки WordPress, позволяет гибко настраивать удаление временных данных, включая черновики;
  • Advanced Database Cleaner — инструмент для планирования очисток и удаления устаревших записей.

Все эти плагины имеют удобный интерфейс и не требуют навыков программирования.

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

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

Также можно добавить в код логи или уведомления по email, чтобы контролировать процесс удаления:

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_date < %s",
        $date_threshold
    ) );

    $deleted_count = 0;
    if ( ! empty( $drafts ) ) {
        foreach ( $drafts as $draft_id ) {
            if ( wp_delete_post( $draft_id, true ) ) {
                $deleted_count++;
            }
        }
    }

    if ( $deleted_count ) {
        wp_mail( 'admin@yourdomain.com', 'Удаление старых черновиков', "Удалено {$deleted_count} старых черновиков." );
    }
}
add_action( 'wpkit_delete_old_drafts_hook', 'wpkit_delete_old_drafts' );

Замените admin@yourdomain.com на ваш реальный email.

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

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

function wpkit_clear_scheduled_delete_old_drafts() {
    $timestamp = wp_next_scheduled( 'wpkit_delete_old_drafts_hook' );
    if ( $timestamp ) {
        wp_unschedule_event( $timestamp, 'wpkit_delete_old_drafts_hook' );
    }
}
add_action( 'switch_theme', 'wpkit_clear_scheduled_delete_old_drafts' );

Этот код отменит запланированное событие, например, при смене темы.

Итоги

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

Регулярная оптимизация — залог стабильной и быстрой работы вашего WordPress-сайта.

Как создать автоматическое сохранение данных в WordPress
03.12.2025
Как использовать WPRemark для создания оценок и отзывов в WordPress
01.01.2026
Как проверить и исправить проблемы с переадресацией в WordPress без плагинов
09.06.2026
Как добавить автоматическое удаление старых черновиков в WordPress
22.01.2026
Как установить автоматическую поддержку WordPress с помощью Clearfy Pro
13.04.2026