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

|

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

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

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

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

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

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

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

Ниже пример функции, которая ищет черновики (post_status = 'draft'), созданные более 30 дней назад, и удаляет их:

function wpzoom_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 $draft_id) {
            wp_delete_post($draft_id, true); // true — принудительное удаление без перемещения в корзину
        }
    }
}

Функция использует прямой SQL-запрос к базе данных для выбора подходящих записей и функцию WordPress wp_delete_post для удаления.

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

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

// Регистрируем ежедневное событие при активации темы/плагина
function wpzoom_activate_cron() {
    if (!wp_next_scheduled('wpzoom_daily_delete_old_drafts')) {
        wp_schedule_event(time(), 'daily', 'wpzoom_daily_delete_old_drafts');
    }
}
add_action('wp', 'wpzoom_activate_cron');

// Хук для запуска нашей функции
add_action('wpzoom_daily_delete_old_drafts', 'wpzoom_delete_old_drafts');

// Очистка расписания при деактивации темы/плагина
function wpzoom_deactivate_cron() {
    $timestamp = wp_next_scheduled('wpzoom_daily_delete_old_drafts');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpzoom_daily_delete_old_drafts');
    }
}

Обратите внимание, что запуск WP-Cron зависит от посещений сайта, то есть событие сработает при первом посещении после времени запуска.

Настройка и тестирование

Чтобы проверить работоспособность, можно временно уменьшить значение $days до 0 или 1, чтобы сразу удалить все черновики старше одного дня. После тестов рекомендуем вернуть значение обратно.

Если хотите, чтобы удаление происходило чаще, можно добавить собственный интервал в расписание WP-Cron. Например, каждые 12 часов:

function wpzoom_custom_cron_intervals($schedules) {
    $schedules['twicedaily'] = array(
        'interval' => 12 * 60 * 60, // 12 часов в секундах
        'display'  => __('Каждые 12 часов')
    );
    return $schedules;
}
add_filter('cron_schedules', 'wpzoom_custom_cron_intervals');

И в wp_schedule_event вместо 'daily' укажите 'twicedaily'.

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

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

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

Заключение

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

Как автоматически обновлять виджеты WordPress без перезагрузки страницы
27.02.2026
Как использовать REST API в WordPress для создания простого плагина
15.11.2025
Как избежать проблем с вариациями товаров WooCommerce при массовом импорте
20.04.2026
WooCommerce: решение проблемы с неактивными кнопками корзины после обновления
19.06.2026
Как сделать удалённый вызов PHP функций в WordPress через AJAX
19.01.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше