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

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

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

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

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

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

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

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

Создаем функцию удаления старых записей

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

function wpedu_delete_old_posts() {
    $args = array(
        'date_query' => array(
            array(
                'before' => date('Y-m-d', strtotime('-180 days')),
                'inclusive' => true,
            ),
        ),
        'post_type' => 'post',
        'post_status' => 'publish',
        'fields' => 'ids',
        'nopaging' => true,
    );
    $old_posts = get_posts($args);
    foreach ($old_posts as $post_id) {
        wp_delete_post($post_id, true); // true - для полного удаления
    }
}

Регистрируем событие WP Cron

Добавим планировщик для запуска функции один раз в день:

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

add_action('wpedu_daily_delete_old_posts', 'wpedu_delete_old_posts');

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

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

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

1. Plugin: Auto Delete Posts

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

2. Plugin: Clearfy Pro

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

Как обезопасить процесс удаления и сделать его обратимым

Удаление контента — необратимая операция, особенно при использовании параметра wp_delete_post($post_id, true). Чтобы избежать потери важных данных, рекомендуем:

  • Перед удалением создавать резервные копии базы данных
  • Использовать статус «корзина» (по умолчанию WordPress сначала перемещает записи туда, что позволяет восстановить их)
  • Тестировать функцию удаления на тестовом сайте

Если хочется сначала «архивировать» старый контент, можно изменить статус записей вместо удаления:

function wpedu_archive_old_posts() {
    $args = array(
        'date_query' => array(
            array(
                'before' => date('Y-m-d', strtotime('-180 days')),
                'inclusive' => true,
            ),
        ),
        'post_type' => 'post',
        'post_status' => 'publish',
        'fields' => 'ids',
        'nopaging' => true,
    );
    $old_posts = get_posts($args);
    foreach ($old_posts as $post_id) {
        wp_update_post(array(
            'ID' => $post_id,
            'post_status' => 'draft'
        ));
    }
}

Удаление старых медиафайлов вместе с записями

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

Если хотите реализовать это самостоятельно, можно использовать следующий подход:

function wpedu_delete_post_and_attachments($post_id) {
    $attachments = get_attached_media('', $post_id);
    foreach ($attachments as $attachment) {
        wp_delete_attachment($attachment->ID, true);
    }
    wp_delete_post($post_id, true);
}

function wpedu_delete_old_posts_with_attachments() {
    $args = array(
        'date_query' => array(
            array(
                'before' => date('Y-m-d', strtotime('-180 days')),
                'inclusive' => true,
            ),
        ),
        'post_type' => 'post',
        'post_status' => 'publish',
        'fields' => 'ids',
        'nopaging' => true,
    );
    $old_posts = get_posts($args);
    foreach ($old_posts as $post_id) {
        wpedu_delete_post_and_attachments($post_id);
    }
}

Настройка удаления для кастомных типов записей

Если на вашем сайте используются кастомные типы записей, например, «мероприятия», «продукты» или «отзывы», алгоритм удаления можно адаптировать, заменив параметр 'post_type' => 'post' на нужный тип.

$args = array(
    'post_type' => 'event', // название кастомного типа
    'date_query' => array(
        array('before' => date('Y-m-d', strtotime('-90 days'))),
    ),
    'post_status' => 'publish',
    'fields' => 'ids',
    'nopaging' => true,
);

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

Выводы и рекомендации для разработчиков

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

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

⭐⭐⭐⭐⭐