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

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

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

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

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

Наконец, автоматизация позволяет избежать ошибок и забывчивости, так как процесс четко регламентирован и выполняется по расписанию.

Как работать с WP Cron для автоматического удаления постов

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

Шаг 1. Написание функции удаления старых постов

Для начала создадим функцию wpscan_delete_old_posts(), которая найдёт и удалит записи старше заданного количества дней.

function wpscan_delete_old_posts() {
    $days = 180; // Удалять посты старше 180 дней
    $date_query = array(
        array(
            'column' => 'post_date',
            'before' => "$days days ago",
        ),
    );

    $args = array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'date_query' => $date_query,
        '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 — принудительное удаление без корзины
        }
    }
}

Функция ищет все опубликованные записи старше 180 дней и удаляет их.

Шаг 2. Регистрация задачи WP Cron

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

function wpscan_register_cron_event() {
    if (!wp_next_scheduled('wpscan_daily_delete_old_posts')) {
        wp_schedule_event(time(), 'daily', 'wpscan_daily_delete_old_posts');
    }
}
add_action('wp', 'wpscan_register_cron_event');

add_action('wpscan_daily_delete_old_posts', 'wpscan_delete_old_posts');

Таким образом, при активном вордпресс-сайте функция wpscan_delete_old_posts() будет вызываться ежедневно.

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

Если вы предпочитаете не писать код, есть несколько плагинов для автоматизации удаления постов по дате:

  • Auto Post Delete — позволяет настроить удаление записей и страниц старше заданного срока. Можно выбрать типы постов, категории и другие параметры.
  • Post Expirator — плагин, который позволяет задать дату истечения жизни для каждой записи. По истечении срока пост можно автоматически удалить, изменить статус или переместить в черновики.
  • WP Bulk Delete — мощный инструмент для массового удаления записей по различным условиям, включая дату публикации.

Все эти плагины доступны на WPSHOP.ru с удобной установкой и поддержкой.

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

Удаление старых постов — операция серьезная, и нужно учитывать ряд моментов:

  • Резервное копирование. Перед автоматическим удалением обязательно настройте регулярное резервное копирование базы данных и файлов, чтобы можно было восстановить случайно удалённый контент.
  • Влияние на SEO. Удаление большого количества страниц может повлиять на индексацию сайта. Рассмотрите возможность перенаправления удалённых URL на релевантные страницы или вывод пользовательского сообщения.
  • Связанные данные. При удалении постов учитывайте, что могут оставаться комментарии, метаданные или ссылки на эти записи. Проверьте, чтобы не осталось «битых» ссылок.
  • Проверка нагрузки. Запуск массового удаления на больших сайтах может вызвать нагрузку на сервер. Лучше выполнять такие операции в «тихое» время, либо разбивать удаление на части.

Расширение функционала: удаление старых постов по категориям и другим условиям

Иногда нужно удалять только записи из определённых категорий или с кастомными полями. Рассмотрим, как расширить функцию для удаления постов из категории "Новости" старше 90 дней.

function wpscan_delete_old_news_posts() {
    $days = 90;
    $args = array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'category_name' => 'novosti', // слаг категории
        'date_query' => array(
            array('column' => 'post_date', 'before' => "$days days ago"),
        ),
        'fields' => 'ids',
        'posts_per_page' => -1,
    );

    $posts = get_posts($args);

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

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

Заключение

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

Обязательно тестируйте функции на тестовом сервере и делайте резервные копии перед внедрением на рабочий сайт. Для удобной установки плагинов и качественной поддержки рекомендую использовать WPSHOP.ru.

Авторизация через социальные сети в WordPress: лучшие решения и примеры кода
02.03.2026
Автоматическое удаление неоплаченных заказов в WooCommerce
14.05.2026
Как решить проблему неудачного удаления отказанных заказов WooCommerce с помощью кода
28.04.2026
Как отключить REST API в WordPress для повышения безопасности
15.01.2026
Как автоматизировать удаление старого контента в WordPress по дате
06.04.2026