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

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

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

Старые записи могут:

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

Автоматизация удаления позволяет избавиться от ручной работы и исключить человеческий фактор.

Основные способы автоматического удаления постов

Существует два основных подхода:

  1. Использование специализированных плагинов.
  2. Реализация собственного кода для автоматизации через WP Cron.

Рассмотрим оба варианта с примерами.

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

Один из популярных плагинов — Post Expirator. Он позволяет назначать дату истечения для постов, после которой они удаляются или переводятся в черновики.

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

Самописное решение через WP Cron

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

Пример функции, которая удаляет посты старше заданного количества дней:

function wplink_delete_old_posts() {
    $days = 180; // число дней, по истечении которых посты удаляются
    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'column' => 'post_date',
                'before' => "$days days ago",
            ),
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );

    $old_posts = get_posts($args);
    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            wp_delete_post($post_id, true); // true — удалить без возможности восстановления
        }
    }
}

// Регистрация задачи в WP Cron
function wplink_schedule_delete_old_posts() {
    if (!wp_next_scheduled('wplink_delete_old_posts_hook')) {
        wp_schedule_event(time(), 'daily', 'wplink_delete_old_posts_hook');
    }
}
add_action('wp', 'wplink_schedule_delete_old_posts');
add_action('wplink_delete_old_posts_hook', 'wplink_delete_old_posts');

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

Дополнительные настройки и тонкости

Удаление постов по категориям или тегам

Иногда нужно удалять только контент из определённых категорий или с конкретными метками. Для этого в get_posts добавляем параметры таксономий:

$args['category_name'] = 'news'; // например, категория "news"

Или для тегов:

$args['tag'] = 'archive';

Так можно точечно настраивать очистку.

Удалять ли связанные медиафайлы?

По умолчанию функция wp_delete_post удаляет связанные с постом вложения (медиафайлы), если установлен второй параметр в true. Если требуется сохранить файлы, поставьте false.

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

Для контроля полезно добавлять запись в лог или отправлять уведомление администратору после удаления. Пример уведомления по почте:

function wplink_delete_old_posts() {
    // ... код удаления постов ...
    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            wp_delete_post($post_id, true);
        }
        wp_mail(get_option('admin_email'), 'Автоматическое удаление постов', 'Удалено '.count($old_posts).' старых постов.');
    }
}

Оптимизация базы данных после удаления постов

Удаление большого количества записей может оставить в базе «пустоты» и замедлить работу. Рекомендуется после удаления запускать оптимизацию таблиц. Плагин Clearfy Pro предоставляет удобный интерфейс для очистки и оптимизации базы данных.

Также можно использовать SQL-запросы напрямую или плагины, такие как WP-Optimize.

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

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

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

Как массово удалить или изменить атрибуты Title и Alt у изображений в WordPress
25.02.2026
Массовое обновление атрибутов товаров в WooCommerce: практическое руководство
28.05.2026
Как удалить повторяющиеся вариации товара в WooCommerce
01.05.2026
Как удалить или изменить заголовок страницы в WordPress
30.11.2025
Как создать динамические меню в WordPress: практические решения с кодом и плагинами
12.04.2026