wpnotes.ru wordpress WP Notes

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

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

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

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

  • Поддерживать базу в актуальном состоянии без ручного вмешательства;
  • Уменьшить нагрузку на сервер и ускорить работу сайта;
  • Обеспечить соответствие требованиям к хранению данных, если это регламентировано;
  • Сократить вероятность ошибок и забывчивости при удалении.

Настройка CRON-задачи в WordPress для удаления старых записей

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

Создаем функцию для удаления записей

Допустим, нужно удалить записи стандартного типа post, которым больше 90 дней. Функция будет искать такие записи и удалять их программно.

function wpnotes_delete_old_posts() {
    $threshold_date = date('Y-m-d H:i:s', strtotime('-90 days'));

    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'before' => $threshold_date,
                'inclusive' => true,
            ),
        ),
        '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 — удаление без перемещения в корзину
        }
    }
}

Функция получает ID всех опубликованных записей старше 90 дней и удаляет их окончательно.

Регистрируем CRON-событие

Теперь нужно настроить периодический запуск этой функции. Добавим ее вызов в CRON-планировщик WordPress.

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

add_action('wpnotes_daily_old_posts_cleanup', 'wpnotes_delete_old_posts');

Этот код регистрирует ежедневное событие wpnotes_daily_old_posts_cleanup, которое вызывает функцию удаления старых записей.

Удаление CRON-задачи при деактивации плагина или темы

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

function wpnotes_deactivate_cleanup() {
    $timestamp = wp_next_scheduled('wpnotes_daily_old_posts_cleanup');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpnotes_daily_old_posts_cleanup');
    }
}
register_deactivation_hook(__FILE__, 'wpnotes_deactivate_cleanup');

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

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

Пример удаления кастомного типа записей "event" старше 30 дней

function wpnotes_delete_old_events() {
    $threshold_date = date('Y-m-d H:i:s', strtotime('-30 days'));

    $args = array(
        'post_type'      => 'event',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'before' => $threshold_date,
                'inclusive' => true,
            ),
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );

    $old_events = get_posts($args);

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

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

Очистка метаданных после удаления записей

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

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

Если хочется не писать код самостоятельно, можно использовать готовые плагины с настройками автоочистки:

  • Auto Delete Posts — простой плагин для удаления постов по возрасту;
  • Clearfy Pro — комплексный плагин оптимизации, с функциями очистки и поддержки CRON;
  • Плагины для управления CRON-задачами, например WP Crontrol, позволяют контролировать и тестировать задачи;
  • Для сложных сценариев можно использовать пакет Expert Review, если требуется управление отзывами и их автоматическим архивированием.

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

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

  • Не запускайте задачи слишком часто — достаточно одного раза в сутки или реже;
  • Для сайтов с огромным объемом данных делайте удаление по частям, используя параметр posts_per_page с лимитом, чтобы избежать таймаутов;
  • Перед удалением важных данных делайте резервное копирование — можно использовать автоматические решения, например, с плагином из wpshop.ru;
  • Проводите тестирование на тестовом сайте, чтобы избежать случайных потерь;
  • Отслеживайте логи и при необходимости добавляйте уведомления на email после выполнения задач.

Выводы и итоги

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

Если нужен более гибкий и надежный CRON, можно настроить системный cron на сервере и запускать wp-cron.php по расписанию, отключив встроенный WP-Cron.

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее