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

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

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

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

Определение неиспользуемых постов: критерии и подходы

Перед удалением важно четко определить, какие записи считать неиспользуемыми. Вот распространённые критерии:

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

Чаще всего достаточно удалить старые черновики и авто-сохранения, поскольку они не нужны для сайта.

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

1. WP Helper Auto Cleanup

Этот бесплатный плагин (условное название) позволяет автоматически удалять черновики и авто-сохранения по расписанию. Он интегрируется с WP-Cron и легко настраивается через админку.

Основные возможности:

  • Выбор типов постов для удаления.
  • Настройка возраста постов для удаления (например, старше 30 дней).
  • Журнал удалённых постов с возможностью восстановления.

Скачать и настроить можно на странице WP Helper Auto Cleanup.

2. Clearfy Pro

Clearfy Pro — многофункциональный плагин для оптимизации WordPress, в котором есть модуль автоматического удаления мусорных записей, включая черновики и авто-сохранения. В дополнение к этому Clearfy умеет чистить транзиенты, ревизии и оптимизировать базу данных.

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

Подробнее на Clearfy Pro.

Пример кода: автоматическое удаление черновиков старше 30 дней

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

function wphelper_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_date < %s",
        $date
    ));

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

// Запускаем функцию ежедневно через WP-Cron
if (!wp_next_scheduled('wphelper_daily_delete_old_drafts')) {
    wp_schedule_event(time(), 'daily', 'wphelper_daily_delete_old_drafts');
}
add_action('wphelper_daily_delete_old_drafts', 'wphelper_delete_old_drafts');

Этот код находит все черновики старше 30 дней и удаляет их безвозвратно. Запуск происходит ежедневно через системный планировщик WordPress — WP-Cron.

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

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

Расширенные методы: удаление постов по кастомным условиям

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

Пример расширенного запроса с использованием WP_Query:

function wphelper_delete_unused_posts() {
    $args = [
        'post_type' => 'post',
        'post_status' => 'publish',
        'date_query' => [
            [
                'column' => 'post_date',
                'before' => '60 days ago',
            ],
        ],
        'meta_query' => [
            [
                'key' => 'post_views_count',
                'value' => 10,
                'compare' => '<=',
                'type' => 'NUMERIC',
            ],
        ],
        'fields' => 'ids',
        'posts_per_page' => -1,
    ];

    $query = new WP_Query($args);

    if ($query->have_posts()) {
        foreach ($query->posts as $post_id) {
            wp_delete_post($post_id, true);
        }
    }
}

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

Для подсчёта просмотров можно использовать плагины вроде WP-PostViews или реализовать собственный счётчик через мета-поля.

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

Удаление постов — необратимый процесс, особенно при удалении без перемещения в корзину. Рекомендуется:

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

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

Заключение

Автоматическое удаление неиспользуемых постов в WordPress — важный шаг к поддержанию быстродействия и чистоты сайта. Используйте готовые плагины, такие как WP Helper Auto Cleanup и Clearfy Pro, или создавайте собственные решения на PHP для гибкого управления контентом.

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

Как использовать хуки для масштабирования функциональности WordPress
21.12.2025
Как создать автоматическое наступление событий после публикации в WordPress
19.01.2026
Как использовать WPRemark для оценки и модерации комментариев в WordPress
28.02.2026
Как избежать ошибки Maximum execution time в WordPress
24.03.2026
Как использовать WP-Cron для автоматического обновления данных в WordPress
07.01.2026