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

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

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

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

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

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

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

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

Ниже пример функции wordpressy_delete_old_drafts, которая удаляет все черновики старше 30 дней, и регистрирует ее в планировщике.

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

    if (!empty($drafts)) {
        foreach ($drafts as $post_id) {
            wp_delete_post($post_id, true); // true — без перемещения в корзину
        }
    }
}

// Регистрируем событие, если оно еще не зарегистрировано
if (!wp_next_scheduled('wordpressy_delete_old_drafts_event')) {
    wp_schedule_event(time(), 'daily', 'wordpressy_delete_old_drafts_event');
}

// Привязываем функцию к событию
add_action('wordpressy_delete_old_drafts_event', 'wordpressy_delete_old_drafts');

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

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

  • Удаление происходит безвозвратно — убедитесь, что вам не нужны эти черновики.
  • Если у вас очень большой сайт, запрос к базе может занять время, стоит протестировать нагрузку.
  • Можно изменить период удаления, например, на 15 или 60 дней, заменив значение переменной $days.
  • Для отладки можно сначала выводить список удаляемых постов вместо удаления.

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

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

Рассмотрим два популярных варианта:

1. Clearfy

Плагин Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wordpressy.ru&utm_medium=article&utm_campaign=kak-avtomaticheski-udaljat-starye-chernoviki-v-wordpress) содержит модуль оптимизации базы данных, который может автоматически очищать черновики, ревизии, спам и мусорные комментарии. Настройка — через админку плагина, можно задать периодичность и типы удаляемых данных.

2. WP-Sweep

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

Расширенный пример: удаление черновиков с уведомлением администратора

Для более продвинутого сценария можно добавить отправку email с отчетом после удаления. Это удобно для контроля за процессом очистки.

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

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

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

        wp_mail($to, $subject, $message);
    }
}

if (!wp_next_scheduled('wordpressy_delete_old_drafts_report_event')) {
    wp_schedule_event(time(), 'daily', 'wordpressy_delete_old_drafts_report_event');
}

add_action('wordpressy_delete_old_drafts_report_event', 'wordpressy_delete_old_drafts_with_report');

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

Практические советы по работе с черновиками в WordPress

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

  • Настраивайте права доступа редакторов, чтобы они не создавали лишние дубли и не сохраняли черновики без надобности;
  • Используйте плагины для автоматической очистки базы, чтобы не нагружать себя ручным контролем;
  • Регулярно проверяйте список черновиков и удаляйте ненужные;
  • Для крупных проектов внедряйте процессы ревизии контента, чтобы черновики переходили в публикации быстрее или удалялись;
  • Оптимизируйте WP-Cron, если у вас много задач, чтобы очистка не замедляла сайт.

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

Как использовать REST API для авторизации в WordPress: практические примеры
09.01.2026
Как использовать хуки для расширения функционала WordPress
18.12.2025
Как избежать проблем с пересекающимися CSS в WordPress
30.12.2025
Как создать динамические поля в WordPress без плагинов
26.03.2026
Как создать расписание задач в WordPress с помощью WP-Cron и реального cron
30.03.2026