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

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

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

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

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

Автоматическое удаление записей по дате с помощью WPUpdate функции

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

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

function wpupdate_delete_old_posts() {
    global $wpdb;
    $days = 180; // Кол-во дней для хранения
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

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

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

// Регистрируем cron событие, если оно ещё не создано
if (!wp_next_scheduled('wpupdate_daily_delete_old_posts')) {
    wp_schedule_event(time(), 'daily', 'wpupdate_daily_delete_old_posts');
}

// Хук для выполнения функции
add_action('wpupdate_daily_delete_old_posts', 'wpupdate_delete_old_posts');

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

Безопасность и тестирование

Перед внедрением такой функции на боевой сайт настоятельно рекомендуется:

  • Сделать полную резервную копию базы данных.
  • Проверить работу функции на тестовом или локальном сайте.
  • Добавить логирование удалённых записей для контроля.

Для логирования можно добавить простой вывод в файл:

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

// В функции удаления внутри цикла вызвать:
// wpupdate_log_deleted_post($post_id);

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

Плагин WP-Crontrol для управления задачами

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

Используйте WP-Crontrol, чтобы проверить, что задача wpupdate_daily_delete_old_posts правильно запланирована и работает без ошибок.

Плагин Advanced Database Cleaner

Для более комплексной очистки базы данных подойдёт Advanced Database Cleaner. Он позволяет удалять устаревшие ревизии, черновики, спам-комментарии и другие ненужные данные, а также имеет настройку автоматического планирования очисток.

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

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

Как изменить код для кастомных типов постов

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

function wpupdate_delete_old_custom_posts() {
    global $wpdb;
    $days = 90; // Например, 90 дней для кастомного типа
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
    $post_type = 'event'; // Ваш кастомный тип

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

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

add_action('wpupdate_daily_delete_old_custom_posts', 'wpupdate_delete_old_custom_posts');

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

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

Для удаления записей, принадлежащих определённой категории или метке, можно добавить дополнительный SQL JOIN с таблицей таксономий:

function wpupdate_delete_old_posts_by_category() {
    global $wpdb;
    $days = 365;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
    $category_slug = 'news';

    $old_posts = $wpdb->get_col($wpdb->prepare(
        "SELECT p.ID FROM {$wpdb->posts} p
        INNER JOIN {$wpdb->term_relationships} tr ON (p.ID = tr.object_id)
        INNER JOIN {$wpdb->term_taxonomy} tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id)
        INNER JOIN {$wpdb->terms} t ON (tt.term_id = t.term_id)
        WHERE p.post_date < %s
        AND p.post_status = 'publish'
        AND p.post_type = 'post'
        AND tt.taxonomy = 'category'
        AND t.slug = %s",
        $date_threshold, $category_slug
    ));

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

add_action('wpupdate_daily_delete_old_posts_news_category', 'wpupdate_delete_old_posts_by_category');

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

Удаление данных — необратимая операция. Чтобы избежать потери важной информации, соблюдайте следующие рекомендации:

  • Регулярно создавайте резервные копии базы данных с помощью плагинов, например, Backup Master или аналогичных.
  • Настройте уведомления на email о выполнении автоматического удаления.
  • Перед удалением больших объёмов данных тестируйте код на отдельном сайте.
  • Отключайте функцию, если замечаете ошибки или нежелательные удаления.

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

Выводы и полезные советы

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

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

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WooCommerce: как исправить проблему с возвратом денег при отключённой AJAX-обработке
23.04.2026
Как избежать проблем с кэшированием в WordPress: практические советы и примеры
02.03.2026
WooCommerce: решение проблем с неправильной обработкой AJAX при оплате
11.05.2026
Как удалить или изменить URL страницы в WordPress без плагинов
29.12.2025
WooCommerce: решение проблем с подтверждением заказов и AJAX-обработкой
18.05.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее