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

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

Почему важно удалять старые черновые шаблоны

Черновые шаблоны (draft templates) или записи в статусе «черновик» — это незавершённые материалы, которые не отображаются на сайте для посетителей. Но если их много, это создает:

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

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

Как определить черновые шаблоны для удаления

В WordPress записи с черновым статусом имеют post_status = 'draft'. Чтобы избежать удаления нужных шаблонов, добавим проверку по дате последнего обновления — например, удалим только те, что не менялись больше 30 дней.

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

Пример кода для автоматического удаления старых черновиков

Добавьте следующий код в файл functions.php вашей активной темы или создайте собственный небольшой плагин. Код удалит все записи со статусом draft, не обновлявшиеся последние 30 дней.

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

    // Получаем ID черновиков старше порога
    $old_drafts = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_status = 'draft' AND post_modified < %s",
        $date_threshold
    ));

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

// Запускаем функцию раз в сутки через cron
if (!wp_next_scheduled('wptemplates_cron_delete_old_drafts')) {
    wp_schedule_event(time(), 'daily', 'wptemplates_cron_delete_old_drafts');
}
add_action('wptemplates_cron_delete_old_drafts', 'wptemplates_delete_old_drafts');

Этот код создаёт задачу WordPress Cron, которая ежедневно удаляет устаревшие черновики.

Настройка и контроль выполнения задачи

Чтобы убедиться, что cron-задание работает, можно использовать плагин WP Crontrol. Он позволит просмотреть расписание задач и запускать их вручную для теста.

Если на вашем хостинге WP Cron не работает корректно, настройте системный cron на запуск wp-cron.php каждые 5-15 минут. Это гарантирует выполнение задач в срок.

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

Да, есть плагины, которые помогают контролировать и удалять устаревшие черновики и ревизии. Например:

  • Clearfy Pro — расширенный инструмент оптимизации WordPress, который умеет автоматически чистить базу от мусора, включая старые черновики.
  • Auto Delete Posts — плагин для удаления записей по расписанию и условиям.

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

Особенности и рекомендации при автоматическом удалении

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

Также рекомендуем:

  • Оповещать администраторов сайта о выполнении очистки — можно отправлять email через wp_mail() в функции удаления.
  • Настраивать период хранения черновиков в зависимости от специфики проекта — для новостных сайтов это может быть 7 дней, для блогов — 30 и больше.
  • Проверять, чтобы функция не удаляла черновики, которые используются в качестве шаблонов страниц или в процессе разработки.

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

Если на сайте используются кастомные типы записей (CPT), можно адаптировать код для удаления черновиков только в нужных CPT. Например, для CPT wptemplate:

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

    $old_drafts = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_status = 'draft' AND post_type = %s AND post_modified < %s",
        'wptemplate',
        $date_threshold
    ));

    if (!empty($old_drafts)) {
        foreach ($old_drafts as $post_id) {
            wp_delete_post($post_id, true);
        }
    }
}
add_action('wptemplates_cron_delete_old_drafts', 'wptemplates_delete_old_drafts_by_cpt');

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

Выводы и полезные ссылки

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

Для расширенной оптимизации рекомендую ознакомиться с Clearfy Pro — мощным плагином для автоматизации очистки и ускорения WordPress.

Как создать автоматические шаблоны для постов в WordPress с кастомным выводом
08.04.2026
Как удалить или заблокировать плагин WordPress, если стандартные методы не работают
24.01.2026
WooCommerce: как отключить автоматический пересчет стоимости товаров в корзине
15.07.2026
WooCommerce: как удалить товар из корзины без пересчета стоимости
17.06.2026
WooCommerce: как отключить автоматический пересчет стоимости товаров в корзине
01.06.2026