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

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

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

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

Автоматизация удаления старых записей с помощью WP-Cron

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

Ниже — пример функции, которая удаляет записи типа post, опубликованные более 180 дней назад. Функция запускается раз в сутки.

function wpfactory_delete_old_posts() {
    global $wpdb;
    $days = 180;
    $date_limit = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    // Получаем ID постов старше $days дней
    $old_posts = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'post' AND post_status = 'publish' AND post_date < %s",
        $date_limit
    ));

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

if (!wp_next_scheduled('wpfactory_cron_delete_old_posts')) {
    wp_schedule_event(time(), 'daily', 'wpfactory_cron_delete_old_posts');
}
add_action('wpfactory_cron_delete_old_posts', 'wpfactory_delete_old_posts');

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

Рекомендации по безопасности и тестированию

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

Для этого замените wp_delete_post($post_id, true); на error_log('Old post for deletion: ' . $post_id); и просмотрите логи.

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

Если вы предпочитаете готовые решения, обратите внимание на следующие плагины:

  • Auto Delete Posts — позволяет настраивать правила удаления постов по дате и категории. Есть возможность исключать важные записи.
  • Post Expirator — плагин для автоматического изменения статуса поста по истечении срока, можно настроить удаление или перевод в черновик.
  • Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wpfactory.ru&utm_medium=article&utm_campaign=kak-avtomatizirovat-udaleniye-staryh-zapisej-v-wordpress-bez-riska) — содержит модуль оптимизации базы и управления контентом, включая автоматическое удаление старых записей с расширенными настройками.

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

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

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

function wpfactory_delete_old_posts_filtered() {
    $days = 180;
    $date_limit = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $args = [
        'post_type' => 'post',
        'post_status' => 'publish',
        'date_query' => [
            [
                'before' => $date_limit,
                'inclusive' => true,
            ],
        ],
        'category__not_in' => [1, 2], // ID категорий, которые исключаем
        'posts_per_page' => -1,
        'fields' => 'ids',
    ];

    $old_posts = get_posts($args);

    foreach ($old_posts as $post_id) {
        wp_delete_post($post_id, true);
    }
}

add_action('wpfactory_cron_delete_old_posts', 'wpfactory_delete_old_posts_filtered');

Здесь мы исключаем категории с ID 1 и 2 из удаления. Аналогично можно фильтровать по меткам, типам записей и любым другим параметрам.

Удаление кастомных типов записей

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

'post_type' => 'my_custom_post_type'

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

Мониторинг и логирование удалений

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

function wpfactory_log_deleted_post($post_id) {
    $log_file = WP_CONTENT_DIR . '/wpfactory_deleted_posts.log';
    $message = date('Y-m-d H:i:s') . " - Deleted post ID: " . $post_id . "\n";
    file_put_contents($log_file, $message, FILE_APPEND);
}

function wpfactory_delete_old_posts_with_log() {
    $days = 180;
    $date_limit = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $old_posts = get_posts([
        'post_type' => 'post',
        'post_status' => 'publish',
        'date_query' => [[
            'before' => $date_limit,
            'inclusive' => true,
        ]],
        'posts_per_page' => -1,
        'fields' => 'ids',
    ]);

    foreach ($old_posts as $post_id) {
        wp_delete_post($post_id, true);
        wpfactory_log_deleted_post($post_id);
    }
}

add_action('wpfactory_cron_delete_old_posts', 'wpfactory_delete_old_posts_with_log');

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

Выводы и лучшие практики

Автоматизация удаления старых записей — полезный инструмент для поддержания производительности и чистоты WordPress-сайта. Однако важно соблюдать осторожность:

  • Всегда делайте резервные копии перед внедрением автоматического удаления.
  • Тестируйте код на тестовом сайте или с логированием перед удалением.
  • Используйте WP-Cron для планирования задач без нагрузки на сервер.
  • Подключайте фильтры, чтобы исключать важный контент из удаления.
  • Рассмотрите использование плагинов с проверенной репутацией для упрощения процесса.

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

Как создать автоматическую резервную копию WordPress с помощью WPRemark
20.02.2026
Как сделать автоматические отзывы с оценками в WordPress
17.01.2026
Как использовать хук WooCommerce для обновления метаданных заказа на этапе оформления
22.04.2026
Как устранить ошибку 502 Bad Gateway в WordPress: практические решения
09.01.2026
Очистка базы данных WooCommerce без потери данных: практическое руководство
10.05.2026