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

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

Почему важно удалять старый контент в WordPress

Удаление устаревших материалов на сайте помогает:

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

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

Настройка автоматического удаления старых записей с помощью WP Cron

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

function wpdigest_delete_old_posts() {
    global $wpdb;
    $days = 180; // Срок в днях
    $date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    // Получаем ID постов для удаления
    $posts_to_delete = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM $wpdb->posts WHERE post_date < %s AND post_type = 'post' AND post_status = 'publish'",
        $date
    ));

    foreach ($posts_to_delete as $post_id) {
        wp_delete_post($post_id, true); // true — удалить без возможности восстановления
    }
}

// Планируем событие, если оно не запланировано
if (!wp_next_scheduled('wpdigest_delete_old_posts_hook')) {
    wp_schedule_event(time(), 'daily', 'wpdigest_delete_old_posts_hook');
}

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

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

Как изменить параметры удаления

Вы можете менять тип постов post_type на page или на собственные типы, а также статус post_status (например, draft, pending) для более гибкой очистки.

Автоматическое удаление черновиков и ревизий для чистки базы данных

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

function wpdigest_auto_delete_drafts_and_revisions() {
    global $wpdb;
    $days = 30; // Удалять материалы старше 30 дней
    $date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    // Удаляем черновики
    $wpdb->query($wpdb->prepare(
        "DELETE FROM $wpdb->posts WHERE post_status = 'draft' AND post_modified < %s",
        $date
    ));

    // Удаляем ревизии
    $wpdb->query($wpdb->prepare(
        "DELETE FROM $wpdb->posts WHERE post_type = 'revision' AND post_modified < %s",
        $date
    ));
}

// Запускаем каждодневное событие
if (!wp_next_scheduled('wpdigest_delete_drafts_revisions_hook')) {
    wp_schedule_event(time(), 'daily', 'wpdigest_delete_drafts_revisions_hook');
}
add_action('wpdigest_delete_drafts_revisions_hook', 'wpdigest_auto_delete_drafts_and_revisions');

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

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

Если вы предпочитаете решение без кода, обратите внимание на проверенные плагины:

  • Clearfy Pro — оптимизирует работу сайта, включая автоматическую очистку базы от мусора, ревизий, черновиков и неиспользуемых данных.
  • WPRemark — плагин для управления комментариями и удалением спама, что тоже важно для поддержания чистоты сайта.

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

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

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

Пример решения на PHP, которое удаляет неиспользуемые изображения:

function wpdigest_delete_unused_attachments() {
    $args = [
        'post_type'      => 'attachment',
        'post_status'    => 'inherit',
        'posts_per_page' => -1,
    ];

    $attachments = get_posts($args);
    foreach ($attachments as $attachment) {
        $attachment_id = $attachment->ID;
        $file = get_attached_file($attachment_id);

        // Проверяем, используется ли вложение в контенте
        $query = new WP_Query([
            'post_type'   => 'any',
            'meta_query' => [
                [
                    'key'     => '_thumbnail_id',
                    'value'   => $attachment_id,
                    'compare' => '=',
                ],
            ],
            's'          => basename($file),
        ]);

        if (!$query->have_posts()) {
            // Удаляем вложение
            wp_delete_attachment($attachment_id, true);
        }
    }
}

if (!wp_next_scheduled('wpdigest_delete_unused_attachments_hook')) {
    wp_schedule_event(time(), 'weekly', 'wpdigest_delete_unused_attachments_hook');
}
add_action('wpdigest_delete_unused_attachments_hook', 'wpdigest_delete_unused_attachments');

Данный код запускается раз в неделю и удаляет вложения, которые не связаны с содержимым сайта. Это поможет значительно сэкономить дисковое пространство.

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

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

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

Итоги и рекомендации

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

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

Как автоматизировать управление пользовательскими ролями в WordPress: практические решения
15.03.2026
Как создать автоматический импорт продуктов в WooCommerce с использованием REST API
10.02.2026
Как удалить версию WordPress из HEAD сайта
13.11.2025
WooCommerce: автоматическое изменение стоимости доставки по регионам клиента
03.07.2026
WooCommerce: как автоматически изменять цены товаров при скидках через код
22.04.2026