Как создать автоматический отпускающий посты в WordPress

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

Почему важен автоматический отпуск устаревших постов в WordPress

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

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

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

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

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

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

function wpco_auto_draft_old_posts_callback() {
    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'column' => 'post_date',
                'before' => '180 days ago',
            ),
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );

    $old_posts = get_posts( $args );

    foreach ( $old_posts as $post_id ) {
        wp_update_post( array(
            'ID'          => $post_id,
            'post_status' => 'draft',
        ) );
    }
}
add_action( 'wpco_auto_draft_old_posts_event', 'wpco_auto_draft_old_posts_callback' );

Этот код добавляет ежедневное задание, которое переводит все опубликованные посты старше 180 дней в статус «черновик». Такой подход позволяет сохранить записи, но убрать их из публичного доступа.

Как изменить период и тип постов

Для изменения периода просто замените значение '180 days ago' на нужный интервал, например '90 days ago' или '1 year ago'. Для работы с кастомными типами записей замените 'post_type' => 'post' на нужный slug типа записи.

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

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

wp_update_post( array(
    'ID'          => $post_id,
    'post_status' => 'draft',
) );

на

wp_delete_post( $post_id, true ); // true - принудительное удаление без попадания в корзину

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

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

1. Auto Post Scheduler

Позволяет автоматически публиковать, обновлять или удалять посты по расписанию. Можно настроить удаление постов старше определённого срока.

Скачать и узнать подробнее можно на wpshop.ru.

2. WP Auto Delete Posts

Плагин для автоматического удаления записей по заданным критериям — дате, категории, статусу.

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

3. Clearfy Pro (функция очистки)

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

Подробнее: wpshop.ru

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

При автоматизации важно не потерять ценный контент, поэтому рекомендуем:

  • Добавить в запрос исключения по категориям или меткам, чтобы не трогать ключевые записи;
  • Перед удалением делать резервные копии базы данных или использовать плагин для автоматического бэкапа (например, UpdraftPlus);
  • Внедрять уведомления по email о действиях скрипта для контроля;
  • Использовать статус черновика вместо удаления, чтобы иметь возможность восстановить контент.

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

function wpco_auto_draft_old_posts_callback() {
    $excluded_cat_ids = array(1, 5); // ID категорий для исключения

    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'column' => 'post_date',
                'before' => '180 days ago',
            ),
        ),
        'category__not_in' => $excluded_cat_ids,
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );

    $old_posts = get_posts( $args );

    foreach ( $old_posts as $post_id ) {
        wp_update_post( array(
            'ID'          => $post_id,
            'post_status' => 'draft',
        ) );
    }
}

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

Перед внедрением на боевом сайте обязательно:

  • Тестируйте скрипт на локальной или staging версии сайта;
  • Проверьте, что WP-Cron работает корректно (можно использовать плагин WP Crontrol для управления задачами);
  • Проверьте логи ошибок и уведомления, чтобы быстро реагировать на возможные сбои;
  • Отключайте автоматизацию при обновлениях сайта для предотвращения конфликтов.

Заключение

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

Как создать автоматический импорт данных из Excel в WordPress
09.01.2026
Как удалить неиспользуемые файлы в Media Library WordPress: практические методы и примеры
28.12.2025
Как добавить настройки в админ-панель WordPress
02.12.2025
Автоматическое удаление товаров в WooCommerce по сроку действия
06.05.2026
Как добавить поддержку JSON-LD в WordPress
19.01.2026