wpcoding.ru wordpress WP Coding

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

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

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

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

  • Поддерживать базу данных в актуальном состоянии.
  • Избавляться от устаревшего или нерелевантного контента.
  • Уменьшать нагрузку на сервер и ускорять сайт.

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

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

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

Плагин WP Auto Delete Posts

Этот плагин позволяет настроить автоматическое удаление постов старше определённого количества дней. Вот основные возможности:

  • Выбор типа записи (пост, страница, кастомный тип).
  • Настройка возраста записи для удаления.
  • Возможность исключить определённые категории или теги.

Для установки перейдите в админку WordPress: Плагины > Добавить новый, найдите «WP Auto Delete Posts», установите и активируйте. После этого в настройках плагина выберите параметры удаления.

Пример настройки в плагине WP Auto Delete Posts

В настройках укажите, например, удалять все посты старше 365 дней, кроме категории "Новости". Это позволит автоматически очищать устаревший контент, но сохранить важные новости.

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

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

Пример функции для удаления постов старше определённого времени

function wpcoding_delete_old_posts() {
    $days = 180; // возраст поста в днях
    $date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'before' => $date,
                'inclusive' => true,
            ),
        ),
        '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
if (!wp_next_scheduled('wpcoding_daily_delete_old_posts')) {
    wp_schedule_event(time(), 'daily', 'wpcoding_daily_delete_old_posts');
}
add_action('wpcoding_daily_delete_old_posts', 'wpcoding_delete_old_posts');

Этот код создаёт задачу, которая ежедневно удаляет все опубликованные посты старше 180 дней.

Как настроить WP-Cron для работы

WP-Cron — это встроенный планировщик заданий WordPress. Он запускается при посещении сайта, что может быть недостаточно надёжно на сайтах с низкой посещаемостью. Для более стабильной работы рекомендуется настроить системный cron на сервере, который будет регулярно вызывать wp-cron.php.

Исключение определённых категорий и постов из удаления

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

    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'before' => $date,
                'inclusive' => true,
            ),
        ),
        'category__not_in' => array(1, 3), // ID категорий, которые не удалять
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );

Замените array(1, 3) на ID категорий, которые хотите исключить из удаления.

Пример использования плагина WPGPT для создания уведомлений при удалении постов

Чтобы информировать редакторов о том, что старые посты были удалены, можно использовать плагин WPGPT. Он позволяет автоматически генерировать уведомления и отчёты.

В коде функции удаления можно добавить вызов генерации уведомления:

function wpcoding_send_deletion_report($deleted_ids) {
    if (function_exists('wpgpt_generate_notification')) {
        $message = 'Удалены посты с ID: ' . implode(', ', $deleted_ids);
        wpgpt_generate_notification($message);
    }
}

И вызвать эту функцию после удаления постов.

Резюме и рекомендации

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

×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙