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

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

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

Со временем база данных WordPress увеличивается, что может негативно сказаться на производительности сайта и усложнить его администрирование. Устаревший контент:

  • Снижает скорость работы сайта из-за объёма данных.
  • Может создавать путаницу среди пользователей и редакторов.
  • Увеличивает размер резервных копий, что влияет на их создание и хранение.

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

Основные подходы к автоматическому удалению контента

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

  1. Использование WP-Cron для планирования задач — с помощью встроенного планировщика WordPress можно запускать кастомные функции по расписанию.
  2. Кастомные PHP-функции — пишем свой код, который выбирает и удаляет записи, отвечающие заданным критериям.
  3. Плагины для очистки базы и удаления контента — например, Clearfy Pro, который включает функции оптимизации и может помочь в автоматизации.

Рассмотрим подробно каждый из вариантов.

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

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

Добавьте следующий код в файл functions.php вашей темы или в плагин:

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

// Отписываемся от события при деактивации
function wpeducation_deactivate_cron() {
    $timestamp = wp_next_scheduled('wpeducation_delete_old_content_cron');
    wp_unschedule_event($timestamp, 'wpeducation_delete_old_content_cron');
}
register_deactivation_hook(__FILE__, 'wpeducation_deactivate_cron');

// Хук на выполнение задачи
add_action('wpeducation_delete_old_content_cron', 'wpeducation_delete_old_content');

function wpeducation_delete_old_content() {
    $args = [
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => [
            [
                'column' => 'post_date',
                'before' => '1 year ago', // Удаляем записи старше 1 года
            ],
        ],
        'fields'         => 'ids',
        'posts_per_page' => -1,
    ];

    $old_posts = get_posts($args);

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

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

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

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

$args = [
    'post_type'      => ['post', 'page', 'custom_type'],
    'post_status'    => 'publish',
    'date_query'     => [
        [
            'column' => 'post_date',
            'before' => '6 months ago', // например, 6 месяцев
        ],
    ],
    'fields'         => 'ids',
    'posts_per_page' => -1,
];

Так вы расширите область удаления.

Использование плагина Clearfy Pro для автоматизации

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

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

Дополнительные советы по автоматизации удаления контента

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

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

Логирование и уведомления

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

function wpeducation_delete_old_content() {
    $args = [
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => [
            [
                'column' => 'post_date',
                'before' => '1 year ago',
            ],
        ],
        'fields'         => 'ids',
        'posts_per_page' => -1,
    ];

    $old_posts = get_posts($args);
    $deleted_ids = [];

    foreach ($old_posts as $post_id) {
        if (wp_delete_post($post_id, true)) {
            $deleted_ids[] = $post_id;
        }
    }

    if (!empty($deleted_ids)) {
        wp_mail(get_option('admin_email'), 'Удалён старый контент на сайте', 'Удалены записи с ID: ' . implode(', ', $deleted_ids));
    }
}

Фильтрация по категориям и меткам

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

$args = [
    'post_type'   => 'post',
    'post_status' => 'publish',
    'category__in' => [5, 12], // ID категорий
    'date_query'  => [
        [
            'column' => 'post_date',
            'before' => '1 year ago',
        ],
    ],
    'fields'      => 'ids',
];

Обработка больших объёмов данных: разбивка на части

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

$args = [
    'post_type'      => 'post',
    'post_status'    => 'publish',
    'date_query'     => [
        [
            'column' => 'post_date',
            'before' => '1 year ago',
        ],
    ],
    'fields'         => 'ids',
    'posts_per_page' => 50, // по 50 записей за раз
];

$old_posts = get_posts($args);

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

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

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

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

Не забывайте про резервное копирование и тестирование кода в безопасной среде перед запуском на боевом сайте.

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

Создать и использовать собственные шорткоды в WordPress
31.10.2025
Отложенные комментарии в WordPress: настройка и примеры
11.01.2026
Как создать динамическую почтовую рассылку в WordPress
21.03.2026
Как изменить размер и оптимизировать изображения в WordPress: практические решения и примеры кода
24.12.2025
Как установить лимит на регистрацию пользователей в WordPress
21.02.2026