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

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

Что такое WP-Cron и почему он важен для автоматизации задач в WordPress

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

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

Как написать функцию для удаления старых записей в WordPress

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

function wpconfig_delete_old_posts() {
    global $wpdb;
    $days = 90; // Минимальный возраст записи в днях
    $post_type = 'post'; // Тип записей для удаления

    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $old_posts = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = %s AND post_date < %s AND post_status IN ('publish', 'draft')",
        $post_type, $date_threshold
    ));

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

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

Безопасность и тестирование функции удаления

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

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

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

// Добавление нового интервала, если нужно
function wpconfig_add_cron_interval($schedules) {
    if (!isset($schedules['daily'])) {
        $schedules['daily'] = array(
            'interval' => 86400, // 24 часа
            'display' => __('Once Daily')
        );
    }
    return $schedules;
}
add_filter('cron_schedules', 'wpconfig_add_cron_interval');

// Регистрация события при активации плагина или темы
function wpconfig_schedule_delete_old_posts() {
    if (!wp_next_scheduled('wpconfig_daily_delete_old_posts')) {
        wp_schedule_event(time(), 'daily', 'wpconfig_daily_delete_old_posts');
    }
}
add_action('wp', 'wpconfig_schedule_delete_old_posts');

// Привязка функции удаления к крон-событию
add_action('wpconfig_daily_delete_old_posts', 'wpconfig_delete_old_posts');

// Очистка расписания при деактивации
function wpconfig_deactivate_cron() {
    $timestamp = wp_next_scheduled('wpconfig_daily_delete_old_posts');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpconfig_daily_delete_old_posts');
    }
}
register_deactivation_hook(__FILE__, 'wpconfig_deactivate_cron');

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

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

Если вы предпочитаете готовые решения, рассмотрите эти плагины с возможностью автоматизации удаления:

  • Auto Delete Posts — позволяет настроить автоматическое удаление записей по времени, статусу и типу.
  • Advanced Cron Manager — удобный инструмент для управления WP-Cron задачами, с помощью которого можно создавать и удалять задачи.
  • Clearfy Pro — плагин с набором оптимизаций, включая управление кроном и очистку базы.

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

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

Автоматическое удаление — мощный инструмент, но требует аккуратности:

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

Пример расширенной функции с фильтрацией по категории

function wpconfig_delete_old_posts_by_category($category_slug) {
    $days = 90;
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $args = array(
        'post_type' => 'post',
        'posts_per_page' => -1,
        'date_query' => array(
            array('before' => $date_threshold),
        ),
        'category_name' => $category_slug,
        'post_status' => array('publish', 'draft')
    );

    $old_posts = get_posts($args);

    foreach ($old_posts as $post) {
        wp_delete_post($post->ID, true);
    }
}

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

Используя описанные методы, вы сможете эффективно управлять устаревшим контентом на вашем WordPress-сайте, поддерживая базу данных в оптимальном состоянии и повышая производительность.

Как удалить или изменить название поля в форме регистрации WordPress
11.04.2026
Как автоматизировать очистку неиспользуемых переходных в WordPress
05.02.2026
Как создать автоматические ответы на формы в WordPress
02.01.2026
Выполнение динамических запросов в wpdb WordPress: практические примеры и безопасность
02.02.2026
Как отключить автообновление плагинов в WordPress с использованием кода
23.01.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше