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

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

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

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

Поэтому логично реализовать фильтрацию по post_type при автоматическом удалении.

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

Реализация автоматического удаления по типу записи через WPClass Cron

WPClass Cron — удобный инструмент для создания автоматических задач в WordPress. Мы используем его, чтобы запускать удаление старого контента по расписанию.

Пример кода для создания задачи, удаляющей записи старше 30 дней для конкретного типа записи:

function wpclass_delete_old_posts_by_type() {
    $post_type = 'event'; // Замените на ваш тип записи
    $days_old = 30; // Удалять записи старше 30 дней

    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_old . ' days'));

    $args = array(
        'post_type'      => $post_type,
        'date_query'     => array(
            array(
                'column' => 'post_date',
                'before' => $date_threshold,
            ),
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
        'post_status'    => 'publish',
    );

    $old_posts = get_posts($args);

    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            wp_delete_post($post_id, true); // Удаляем без возможности восстановления
        }
    }
}

// Регистрируем cron задачу
add_action('wpclass_cron_delete_old_posts', 'wpclass_delete_old_posts_by_type');

// Планируем задачу, если еще не запланирована
if (!wp_next_scheduled('wpclass_cron_delete_old_posts')) {
    wp_schedule_event(time(), 'daily', 'wpclass_cron_delete_old_posts');
}

Данный код добавляет задачу, которая каждый день удаляет публикации типа event, которым больше 30 дней.

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

Для других типов записей просто замените значение переменной $post_type на нужный slug типа записи, например, news, announcement и т.д.

Для изменения периода удаления достаточно изменить переменную $days_old.

Использование WPClass Cron с плагином Clearfy Pro для оптимизации

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

Однако, если нужна гибкость и кастомизация — собственный код с WPClass Cron идеален.

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

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

Пример упрощённого кода для создания настроек:

function wpclass_register_settings() {
    add_option('wpclass_delete_post_type', 'event');
    add_option('wpclass_delete_days_old', 30);
    register_setting('wpclass_options_group', 'wpclass_delete_post_type');
    register_setting('wpclass_options_group', 'wpclass_delete_days_old');
}
add_action('admin_init', 'wpclass_register_settings');

function wpclass_register_options_page() {
    add_options_page('Удаление старого контента', 'Удаление контента', 'manage_options', 'wpclass', 'wpclass_options_page');
}
add_action('admin_menu', 'wpclass_register_options_page');

function wpclass_options_page() {
    ?>
    <div>
        <h2>Настройки удаления старого контента</h2>
        <form method="post" action="options.php">
            <?php settings_fields('wpclass_options_group'); ?>
            <label>Тип записи для удаления:</label><br>
            <input type="text" name="wpclass_delete_post_type" value="<?php echo get_option('wpclass_delete_post_type'); ?>" /><br><br>
            <label>Удалять записи старше (дней):</label><br>
            <input type="number" name="wpclass_delete_days_old" value="<?php echo get_option('wpclass_delete_days_old'); ?>" /><br><br>
            <?php submit_button(); ?>
        </form>
    </div>
    <?php
}

Далее в функции удаления надо заменить жестко прописанные значения на опции:

function wpclass_delete_old_posts_by_type() {
    $post_type = get_option('wpclass_delete_post_type', 'event');
    $days_old = intval(get_option('wpclass_delete_days_old', 30));
    // Далее код без изменений
}

Дополнительные советы по безопасности и производительности

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

Для этого в аргументах get_posts укажите 'posts_per_page' => 50, а функцию запускайте несколько раз, пока есть записи.

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

Для безопасности убедитесь, что функция удаления не запускается чаще одного раза в сутки и доступна только с правами администратора.

Заключение

Автоматическое удаление старого контента в WordPress — важная задача для поддержания порядка и оптимизации сайта. Используя WPClass Cron и простые настройки, вы можете гибко управлять удалением по типам записей и времени.

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

Автоматическое удаление заказов WooCommerce по статусу «неоплачено» и интеграция с кассой (ККМ)
25.05.2026
Как удалить редиректы после изменения структуры URL в WordPress
05.12.2025
Как удалить неиспользуемые виджеты в WordPress для ускорения сайта
09.03.2026
Как создать собственный REST API endpoint в WordPress
22.11.2025
Как создать автоматические задачи в WordPress с помощью WPClass Cron
29.11.2025