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

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

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

С течением времени на сайте накапливаются записи, которые перестали быть актуальными — новости, акции, статьи с устаревшей информацией. Их хранение занимает ресурсы сервера и замедляет работу сайта, особенно при большом объёме данных. Ручное удаление — трудоёмкий процесс, а забывчивость приводит к разрастанию «мусора» в базе данных.

Автоматизация позволяет настроить удаление таких записей по времени (например, после 6 месяцев) или по другим критериям (например, статус публикации). Это особенно актуально для новостных порталов, блогов и сайтов с регулярно обновляемым контентом.

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

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

Рассмотрим пример функции, которая автоматически удаляет записи старше заданного количества дней. Мы создадим функцию wporg_autodelete_old_posts и подключим её к WP-Cron, чтобы она запускалась регулярно.

function wporg_autodelete_old_posts() {
    $days = 180; // количество дней, после которого удалять запись
    $date_query = array(
        'column' => 'post_date',
        'before' => date('Y-m-d H:i:s', strtotime("-{$days} days")),
    );

    $old_posts = get_posts(array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array($date_query),
        'fields'         => 'ids',
        'posts_per_page' => -1
    ));

    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            wp_delete_post($post_id, true); // true — удаление без помещения в корзину
        }
    }
}

// Запускаем нашу функцию ежедневно
if (!wp_next_scheduled('wporg_daily_autodelete')) {
    wp_schedule_event(time(), 'daily', 'wporg_daily_autodelete');
}
add_action('wporg_daily_autodelete', 'wporg_autodelete_old_posts');

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

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

Для изменения периода достаточно изменить значение переменной $days. Чтобы удалить записи нескольких типов, можно передать массив в параметр post_type:

'post_type' => array('post', 'custom_type')

Если нужно удалять записи с определённым статусом (например, только черновики), измените параметр post_status на 'draft' или другой.

Автоматическое удаление старого контента с помощью плагинов

Если вы не хотите писать код, можно использовать готовые решения. Один из популярных плагинов — Auto Delete Posts. Он позволяет настраивать автоудаление по дате, типу записи, статусу и другим критериям.

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

Настройка плагина Auto Delete Posts

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

  • Выбор типа записей и статуса;
  • Период давности записей;
  • Возможность включить уведомления о происходящих удалениях;
  • Опция удаления записей без помещения в корзину.

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

Удаление пользовательских типов записей и метаданных

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

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

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

function wporg_delete_post_meta_for_old_posts() {
    global $wpdb;
    $days = 180;
    $date_limit = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $post_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_date < %s",
        $date_limit
    ));

    if (!empty($post_ids)) {
        foreach ($post_ids as $post_id) {
            delete_post_meta($post_id, 'your_custom_meta_key');
        }
    }
}
<

Эту функцию можно запускать вместе с удалением постов или отдельно для очистки метаданных.

Как избежать ошибок и обезопасить процесс удаления

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

  • Делать резервные копии базы данных перед включением автоудаления.
  • Тестировать функции на тестовом сайте или локальной копии.
  • Использовать опцию удаления с перемещением в корзину, чтобы иметь возможность восстановить записи.
  • Писать логи удалённых записей для контроля процесса.

Пример добавления логирования удаления:

function wporg_autodelete_old_posts() {
    $days = 180;
    $date_query = array(
        'column' => 'post_date',
        'before' => date('Y-m-d H:i:s', strtotime("-{$days} days")),
    );

    $old_posts = get_posts(array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array($date_query),
        'fields'         => 'ids',
        'posts_per_page' => -1
    ));

    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            $deleted = wp_delete_post($post_id, true);
            if ($deleted) {
                error_log("[wporg] Удалена запись ID: {$post_id}");
            }
        }
    }
}

Выводы и рекомендации

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

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

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

Скачать WP с оф. сайта Магазин проверенных платных тем