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

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

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

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

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

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

1. Использование плагинов для автоматического удаления постов

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

  • Auto Post Scheduler — позволяет автоматически удалять или архивировать записи старше заданного времени.
  • WP Crontrol — плагин для управления задачами WP-Cron, с его помощью можно создать собственный скрипт удаления.

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

2. Создание собственного кода для автоматического удаления постов

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

Ниже приведен пример функции wpall_delete_old_posts(), которая удаляет публикации старше 180 дней. Код добавляет задачу в расписание WordPress и выполняет очистку:

function wpall_delete_old_posts() {
    $days = 180; // количество дней
    $date_query = array(
        'column' => 'post_date',
        'before' => date('Y-m-d H:i:s', strtotime("-{$days} days")),
        'inclusive' => true,
    );

    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array($date_query),
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );

    $old_posts = get_posts($args);

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

// Регистрация события в WP-Cron
function wpall_schedule_old_posts_deletion() {
    if (!wp_next_scheduled('wpall_daily_old_posts_cleanup')) {
        wp_schedule_event(time(), 'daily', 'wpall_daily_old_posts_cleanup');
    }
}
add_action('wp', 'wpall_schedule_old_posts_deletion');

// Привязка нашей функции к событию
add_action('wpall_daily_old_posts_cleanup', 'wpall_delete_old_posts');

Этот код добавляет ежедневную задачу, которая удаляет все опубликованные посты старше 180 дней. Вы можете изменить значение $days под свои нужды.

Расширение функционала: удаление постов по категории или тегу

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

$args = array(
    'post_type'      => 'post',
    'post_status'    => 'publish',
    'date_query'     => array($date_query),
    'tax_query'      => array(
        array(
            'taxonomy' => 'category',
            'field'    => 'slug',
            'terms'    => 'novosti',
        ),
    ),
    'fields'         => 'ids',
    'posts_per_page' => -1,
);

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

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

Перед тем как включать автоматическое удаление, рекомендую:

  • Создать резервную копию базы данных.
  • Тестировать код на тестовом сайте.
  • Добавить дополнительные проверки, например, исключать посты с определёнными метками или ID.

Для исключения записей можно использовать параметр post__not_in:

$exclude_ids = array(12, 34, 56); // ID постов, которые не удалять
$args['post__not_in'] = $exclude_ids;

Интеграция с плагинами: как совместить автоматическое удаление с Clearfy Pro

Если вы используете плагин Clearfy Pro для оптимизации WordPress, можно использовать его возможности для управления задачами WP-Cron и мониторинга процессов очистки.

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

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

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

function wpall_delete_old_posts() {
    $days = 7; // для теста удаляем посты старше 7 дней
    $date_query = array(
        'column' => 'post_date',
        'before' => date('Y-m-d H:i:s', strtotime("-{$days} days")),
        'inclusive' => true,
    );

    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array($date_query),
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );

    $old_posts = get_posts($args);

    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            wp_delete_post($post_id, true);
            error_log("[WPAll] Deleted post ID: $post_id");
        }
    }
}

Логи можно просматривать через панель хостинга или использовать плагин для просмотра error_log.

Выводы и рекомендации

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

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

Как удалить или заблокировать неиспользуемые плагины в WordPress
25.11.2025
WordPress авторизация по одноразовому паролю (OTP) с практическим применением
30.01.2026
Как создать собственный виджет в WordPress с примерами кода
14.11.2025
Как удалить старые папки и файлы из медиабиблиотеки WordPress
26.02.2026
Автоматическое удаление старых записей и ревизий в WordPress через WP-Cron
12.01.2026