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

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

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

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

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

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

Автоматическое удаление черновиков через WPDirect-функцию на PHP

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

function wpdirect_auto_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
    ));

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

// Запускаем функцию при кроне WordPress, например, раз в сутки
add_action('wp_scheduled_auto_delete_old_drafts', 'wpdirect_auto_delete_old_drafts');

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

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

Пояснения к коду

Мы используем SQL-запрос для выборки ID черновиков, дата которых меньше указанного порога. После этого вызываем стандартную функцию wp_delete_post с параметром true, чтобы удалять записи без помещения в корзину. Это экономит место и упрощает очистку.

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

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

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

1. WP Optimize

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

Плюсы:

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

Минусы:

  • Может быть избыточен, если нужна только очистка черновиков.

2. Delete Expired Transients

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

Для более точной работы с черновиками лучше использовать специализированные скрипты или WP Optimize.

Как интегрировать автоматическое удаление с WPDirect и WPGPT

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

Можно расширить пример с функцией wpdirect_auto_delete_old_drafts(), добавив логику, которая будет удалять только черновики, созданные через WPGPT, если они устарели и не используются. Для этого понадобится дополнительная метаинформация в постах, например, мета-ключ _wpgpt_generated:

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

    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'draft',
        'meta_key'       => '_wpgpt_generated',
        'date_query'     => array(
            array(
                'column' => 'post_date',
                'before' => $date_threshold,
            ),
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );

    $drafts = get_posts($args);

    foreach ($drafts as $post_id) {
        wp_delete_post($post_id, true);
    }
}

add_action('wp_scheduled_auto_delete_old_wpgpt_drafts', 'wpdirect_auto_delete_old_wpgpt_drafts');

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

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

Особенности и советы по внедрению

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

  • Резервное копирование. Всегда делайте бэкап перед внедрением автоматических скриптов удаления.
  • Тестирование. Запускайте функции сначала в тестовой среде, чтобы убедиться в корректности работы.
  • Логи. Желательно вести логи удалённых записей, чтобы можно было отследить удалённые материалы.
  • Период удаления. Выбирайте разумный срок — например, 30–60 дней — чтобы не удалять черновики, которые всё ещё могут понадобиться.
  • Уведомления. При необходимости реализуйте отправку уведомлений администратору после удаления.

Выводы

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

Как автоматически менять статус заказа WooCommerce по условиям: решение проблемы с неработающим обновлением
29.04.2026
Как установить автоматический ответ на отзывы в WordPress
22.01.2026
Решение проблемы с отключением WooCommerce после обновления или миграции
18.04.2026
WooCommerce: автоматическое изменение статуса заказа при неудачной оплате
12.06.2026
WooCommerce: автоматическое изменение статуса заказа при отмене с оплатой
30.05.2026