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

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

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

Ручное удаление черновиков — трудоемкий и неэффективный процесс, поэтому разумно автоматизировать эту задачу. В этой статье мы рассмотрим, как с помощью простого кода и стандартного WP-Cron настроить автоматическое удаление черновиков старше определенного срока.

Создание функции автоматического удаления старых черновиков

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

function wpabout_delete_old_drafts() {
    global $wpdb;
    $days = 30; // Срок в днях для удаления
    $date = 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
    ));

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

В этом коде мы используем глобальный объект $wpdb для запроса к базе данных, выбираем ID черновиков, дата изменения которых старше 30 дней, и удаляем их с помощью функции wp_delete_post с параметром true, чтобы удалить посты без помещения в корзину.

Настройка WP-Cron для автоматизации удаления

Теперь необходимо настроить системное задание WP-Cron, чтобы функция wpabout_delete_old_drafts запускалась автоматически, например, раз в сутки.

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

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

add_action('wpabout_daily_draft_cleanup', 'wpabout_delete_old_drafts');

Объяснение кода:

  • Функция wpabout_schedule_draft_cleanup проверяет, есть ли уже запланированное событие с именем wpabout_daily_draft_cleanup. Если нет — создаёт его с интервалом daily (раз в сутки).
  • Хук add_action('wpabout_daily_draft_cleanup', 'wpabout_delete_old_drafts') связывает событие с функцией удаления черновиков.

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

Как проверить работу и отладить

Для отладки можно временно изменить интервал запуска на более частый, например, через wp_schedule_event(time(), 'hourly', 'wpabout_hourly_draft_cleanup') и соответствующе изменить хук и функцию-обработчик.

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

function wpabout_delete_old_drafts() {
    global $wpdb;
    $days = 30;
    $date = 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_modified < %s",
        $date
    ));
    if (!empty($drafts)) {
        foreach ($drafts as $post_id) {
            if (wp_delete_post($post_id, true)) {
                error_log("[wpabout] Удалён черновик ID: $post_id");
            }
        }
    } else {
        error_log("[wpabout] Нет черновиков для удаления");
    }
}

Логи можно смотреть в файле debug.log при включенном WP_DEBUG_LOG.

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

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

  • Clearfy Pro — содержит модуль очистки базы, включая удаление черновиков старше определённого срока. Подробнее на wpshop.ru.
  • WPOptimize — популярный плагин для очистки и оптимизации базы данных, умеет удалять старые черновики и ревизии.
  • Advanced Database Cleaner — позволяет настроить автоматическую очистку базы и удаление неиспользуемых данных.

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

Советы по безопасности и производительности

Удаление черновиков — необратимая операция, поэтому убедитесь, что:

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

Кроме того, не ставьте слишком частый интервал запуска — это может увеличить нагрузку на сервер без существенной пользы.

Итог

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

Как создать собственный REST API endpoint в WordPress
13.11.2025
WooCommerce: как автоматически изменять стоимость товара при изменении атрибутов
14.06.2026
WooCommerce: как установить обновление количества товаров в корзине без перезагрузки страницы
10.06.2026
Как изменить URL страницы в WordPress без перенаправления
30.11.2025
WooCommerce: как использовать хуки для добавления пользовательских полей в форму оформления заказа
18.05.2026