Автоматическое удаление неиспользуемых записей в WordPress

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

Почему важно удалять неиспользуемые записи

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

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

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

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

  • Черновики, которые не редактировались более месяца;
  • Записи в статусе «ожидает проверки» старше 30 дней;
  • Автоматические сохранения (ревизии), превышающие определённое количество;
  • Посты с меткой «архив» или специальным пользовательским полем, указывающим на устаревание.

Можно также рассматривать удаление записей без комментариев или просмотров за длительный период.

Автоматическое удаление с помощью плагинов

Плагин WP Sweep

WP Sweep позволяет очищать базу данных от ревизий, удалённых записей, спам-комментариев и других ненужных элементов. В нем есть возможность настроить очистку черновиков и других типов записей.

Чтобы установить и использовать WP Sweep:

  1. Перейдите в админку WordPress > Плагины > Добавить новый;
  2. В поиске введите "WP Sweep" и установите плагин;
  3. Активируйте его и перейдите в Инструменты > Sweep;
  4. Выберите, что хотите очистить, и запустите процесс.

Но WP Sweep не позволяет гибко настраивать автоматическое удаление по времени, поэтому для более тонкой настройки лучше использовать собственные решения.

Плагин Advanced Database Cleaner

Этот плагин позволяет настроить расписание для удаления ревизий, черновиков и других элементов. Кроме того, он может очищать базы данных по расписанию через WP-Cron.

Подробности и настройка доступны в настройках плагина после установки.

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

Если вы хотите гибко контролировать процесс, лучше реализовать удаление через собственный PHP-код с использованием WP-Cron. Ниже пример функции для удаления черновиков старше 30 дней:

function wpbono_delete_old_drafts() {
    $args = array(
        'post_status' => 'draft',
        'date_query' => array(
            array(
                'column' => 'post_modified',
                'before' => '30 days ago',
            ),
        ),
        'posts_per_page' => -1,
        'fields' => 'ids',
    );

    $old_drafts = get_posts($args);

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

Чтобы запускать эту функцию автоматически, нужно добавить событие в WP-Cron:

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

add_action('wpbono_daily_delete_old_drafts', 'wpbono_delete_old_drafts');

Этот код проверяет и удаляет все черновики старше 30 дней ежедневно.

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

Иногда нужно удалять записи не только по статусу, но и по определённым мета-полям. Например, посты с пользовательским полем _archive_flag равным 1.

function wpbono_delete_archived_posts() {
    $args = array(
        'post_type' => 'post',
        'meta_key' => '_archive_flag',
        'meta_value' => '1',
        'posts_per_page' => -1,
        'fields' => 'ids',
    );

    $archived_posts = get_posts($args);

    if (!empty($archived_posts)) {
        foreach ($archived_posts as $post_id) {
            wp_delete_post($post_id, true);
        }
    }
}

Эту функцию также можно привязать к событию WP-Cron, как в предыдущем примере.

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

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

  • Используйте плагин WP-CLI для просмотра и удаления записей;
  • Логируйте удаляемые ID в отдельный файл, чтобы видеть, какие записи удаляются;
  • Добавляйте проверку nonce, если запускаете удаление через AJAX или панель администратора;
  • Сохраняйте резервные копии базы данных перед применением автоматических удалений.

Пример логирования удалений:

function wpbono_delete_old_drafts() {
    $args = array(
        'post_status' => 'draft',
        'date_query' => array(
            array('column' => 'post_modified', 'before' => '30 days ago'),
        ),
        'posts_per_page' => -1,
        'fields' => 'ids',
    );

    $old_drafts = get_posts($args);

    if (!empty($old_drafts)) {
        foreach ($old_drafts as $post_id) {
            error_log('Deleting draft post ID: ' . $post_id);
            wp_delete_post($post_id, true);
        }
    }
}

Заключение

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

Для удобства и расширения возможностей рекомендую ознакомиться с плагинами Advanced Database Cleaner и WP Sweep. Они помогут автоматизировать рутинные задачи и сохранить базу в идеальном состоянии.

Как автоматизировать создание резервных копий в WordPress с помощью Clearfy Pro
18.01.2026
Использование хука before_add_to_cart в WooCommerce для проверки товара перед добавлением в корзину
19.04.2026
Как создать автоматическое ответвление на комментарии в WordPress
19.12.2025
Как отказаться от PHP в WordPress в пользу JavaScript: практическое руководство
07.04.2026
Как создать автоматические переадресации в WordPress без плагинов
25.02.2026