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

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

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

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

  • Оптимизация базы данных: Черновики занимают место в таблице wp_posts, что замедляет запросы и увеличивает размер резервных копий.
  • Улучшение производительности: Чем меньше записей в базе, тем быстрее работают административные запросы и интерфейс WordPress.
  • Чистота и порядок: Меньше лишних записей — удобнее ориентироваться в админке.

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

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

Для решения задачи мы реализуем функцию wpstandart_auto_delete_old_drafts, которая будет запускаться по расписанию с помощью wp_cron. Она удалит все черновики старше 30 дней. Разумеется, вы можете изменить период под свои нужды.

Шаг 1. Добавляем функцию удаления

В файл functions.php вашей темы или в собственный плагин добавьте следующий код:

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

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

    $deleted = $wpdb->query($query);

    if ($deleted !== false) {
        error_log("wpstandart: Удалено {$deleted} старых черновиков.");
    }
}

Этот код удаляет записи с post_status = 'draft', которые не редактировались более 30 дней. Для безопасности и отладки результат записывается в лог ошибок.

Шаг 2. Запускаем функцию по расписанию

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

function wpstandart_schedule_delete_old_drafts() {
    if (!wp_next_scheduled('wpstandart_delete_old_drafts_hook')) {
        wp_schedule_event(time(), 'daily', 'wpstandart_delete_old_drafts_hook');
    }
}
add_action('wp', 'wpstandart_schedule_delete_old_drafts');

add_action('wpstandart_delete_old_drafts_hook', 'wpstandart_auto_delete_old_drafts');

Этот код проверяет, запланировано ли событие, и если нет — добавляет ежедневный запуск очистки.

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

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

  • WP-Optimize — мощный инструмент для очистки и оптимизации базы данных. Позволяет удалять старые ревизии и черновики.
  • Clearfy Pro — плагин для оптимизации и очистки WordPress с возможностью настроить удаление устаревших записей.

Оба решения имеют удобный интерфейс и дополнительные функции для поддержания сайта в тонусе.

Как избежать случайного удаления важных черновиков

Удаление черновиков — операция, которая может повредить рабочим материалам, если не контролировать процесс. Вот советы, как обезопасить себя:

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

Например, чтобы исключить черновики с меткой important, можно изменить запрос:

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

    $query = "DELETE p FROM {$wpdb->posts} p"
           . " LEFT JOIN {$wpdb->term_relationships} tr ON (p.ID = tr.object_id)"
           . " LEFT JOIN {$wpdb->term_taxonomy} tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id)"
           . " LEFT JOIN {$wpdb->terms} t ON (tt.term_id = t.term_id)"
           . " WHERE p.post_status = 'draft'"
           . " AND p.post_modified < %s"
           . " AND (t.slug IS NULL OR t.slug != 'important')";

    $prepared = $wpdb->prepare($query, $date_threshold);

    $deleted = $wpdb->query($prepared);

    if ($deleted !== false) {
        error_log("wpstandart: Удалено {$deleted} старых черновиков, исключая важные.");
    }
}

Выводы и рекомендации по поддержке чистоты черновиков

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

Рекомендуется:

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

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

Как избежать замедления WooCommerce при большом количестве товаров
12.06.2026
Автообновление плагинов WordPress без риска: настройка и контроль
13.01.2026
Автоматическое удаление неиспользуемых плагинов WordPress
11.04.2026
Как удалить все комментарии в WordPress с помощью кода и плагинов
18.02.2026
Как создать уникальный клиентский API в WordPress для обмена данными
26.12.2025