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

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

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

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

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

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

Для реализации автоматического удаления можно использовать два подхода: с помощью плагинов и самостоятельно через код. Ниже рассмотрим оба варианта.

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

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

  • Auto Delete Posts — позволяет настроить удаление постов старше определённого количества дней. Удобный интерфейс, поддержка кастомных типов записей.
  • WP Bulk Delete — мощный инструмент для массового удаления записей по различным критериям, включая дату публикации, категории, теги и метаданные.
  • Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wpupdate.ru&utm_medium=article&utm_campaign=kak-dobavit-avtomaticheskoe-udaleniye-staryh-zapisej-v-wordpress) — плагин с расширенными функциями оптимизации, включая автоматическую очистку базы и удаление устаревшего контента.

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

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

Если вы хотите добавить эту функциональность без плагинов, можно воспользоваться пользовательским cron-заданием и WP_Query. Вот пример, который удаляет записи старше 365 дней — этот код нужно добавить в файл functions.php вашей темы или в отдельный плагин:

function wpupdate_delete_old_posts() {
    // Определяем дату года назад
    $date_before = date('Y-m-d H:i:s', strtotime('-365 days'));

    // Запрос записей старше 365 дней
    $old_posts = new WP_Query(array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'before' => $date_before,
            ),
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1
    ));

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

// Регистрируем событие в WP 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');

Этот код создаёт ежедневное задание, которое проверяет и удаляет посты старше года. Вы можете изменить период, заменив '-365 days' на нужное значение.

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

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

    'post_type' => array('post', 'review', 'event'),

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

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

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

    $old_drafts = new WP_Query(array(
        'post_status'    => 'draft',
        'date_query'     => array(
            array(
                'before' => $date_before,
            ),
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1
    ));

    if (!empty($old_drafts->posts)) {
        foreach ($old_drafts->posts as $post_id) {
            wp_delete_post($post_id, true);
        }
    }
}

if (!wp_next_scheduled('wpupdate_daily_delete_old_drafts')) {
    wp_schedule_event(time(), 'daily', 'wpupdate_daily_delete_old_drafts');
}

add_action('wpupdate_daily_delete_old_drafts', 'wpupdate_delete_old_drafts');

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

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

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

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

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

function wpupdate_delete_old_posts_with_log() {
    $date_before = date('Y-m-d H:i:s', strtotime('-365 days'));

    $old_posts = new WP_Query(array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array('before' => $date_before),
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1
    ));

    if (!empty($old_posts->posts)) {
        foreach ($old_posts->posts as $post_id) {
            $title = get_the_title($post_id);
            $date = get_the_date('Y-m-d', $post_id);
            if (wp_delete_post($post_id, true)) {
                error_log("[WPUpdate] Удалён пост ID $post_id, заголовок: '$title', дата: $date");
            }
        }
    }
}

add_action('wpupdate_daily_delete_old_posts', 'wpupdate_delete_old_posts_with_log');

Логи сохраняются в стандартный файл debug.log (при включённом WP_DEBUG_LOG), что позволяет отслеживать действия скрипта.

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

⭐⭐⭐⭐⭐
Как избежать проблем с базой данных при масштабных обновлениях WordPress
08.01.2026
Как использовать AJAX в WordPress для обновления контента без перезагрузки страницы
02.12.2025
Как использовать метаданные для оптимизации WordPress: практические советы и примеры
20.11.2025
WooCommerce: как правильно обрабатывать ошибки при оплате и ответы клиенту
26.04.2026
Как отключить автообновления тем и плагинов WordPress через функции
25.02.2026
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙