Автоматизация удаления старых постов в WordPress по дате и статусу

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

Зачем нужна автоматизация удаления старых постов в WordPress

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

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

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

Плагин WP Crontrol для создания задач удаления

WP Crontrol позволяет управлять и создавать задачи cron в WordPress. Мы можем написать функцию, которая удаляет посты по условию, и запускать её по расписанию.

Установка:

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

function wpdetect_delete_old_posts() {
    $args = array(
        'date_query' => array(
            array(
                'before' => '1 year ago', // Удаляем посты старше года
                'inclusive' => true,
            ),
        ),
        'post_type' => 'post',
        'post_status' => 'publish',
        'fields' => 'ids',
        'posts_per_page' => -1,
    );

    $old_posts = get_posts($args);

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

// Регистрация события cron
if (! wp_next_scheduled('wpdetect_delete_old_posts_hook')) {
    wp_schedule_event(time(), 'daily', 'wpdetect_delete_old_posts_hook');
}

add_action('wpdetect_delete_old_posts_hook', 'wpdetect_delete_old_posts');

Эта функция удалит все опубликованные посты старше одного года. Задача будет запускаться ежедневно.

Плагин Auto Post Scheduler с фильтрацией по дате

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

Создание собственного плагина для WPDetect: удаление постов по дате и статусу

Если нужна максимальная кастомизация, создадим минимальный плагин. Для этого создайте в папке wp-content/plugins директорию wpdetect-auto-delete и в ней файл wpdetect-auto-delete.php со следующим содержимым:

<?php
/**
 * Plugin Name: WPDetect Auto Delete Old Posts
 * Description: Автоматическое удаление старых постов по дате и статусу.
 * Version: 1.0
 * Author: WPDetect
 */

function wpdetect_auto_delete_old_posts() {
    $args = array(
        'date_query' => array(
            array(
                'before' => '6 months ago', // Удаляем посты старше 6 месяцев
                'inclusive' => true,
            ),
        ),
        'post_type' => 'post',
        'post_status' => array('draft', 'pending', 'trash'), // Можно указать несколько статусов
        'fields' => 'ids',
        'posts_per_page' => -1,
    );

    $old_posts = get_posts($args);

    foreach ($old_posts as $post_id) {
        wp_delete_post($post_id, true); // Без возможности восстановления
    }
}

register_activation_hook(__FILE__, 'wpdetect_auto_delete_schedule');
register_deactivation_hook(__FILE__, 'wpdetect_auto_delete_unschedule');

function wpdetect_auto_delete_schedule() {
    if (! wp_next_scheduled('wpdetect_auto_delete_hook')) {
        wp_schedule_event(time(), 'weekly', 'wpdetect_auto_delete_hook');
    }
}

function wpdetect_auto_delete_unschedule() {
    wp_clear_scheduled_hook('wpdetect_auto_delete_hook');
}

add_action('wpdetect_auto_delete_hook', 'wpdetect_auto_delete_old_posts');

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

Как избежать нежелательных удалений: рекомендации и фильтры

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

function wpdetect_filter_posts_to_delete($post_id) {
    $categories = wp_get_post_categories($post_id);
    // Не удалять посты из категории "Важное"
    $protected_cat_id = 10;
    if (in_array($protected_cat_id, $categories)) {
        return false;
    }
    return true;
}

function wpdetect_auto_delete_old_posts_safe() {
    $args = array(
        'date_query' => array(
            array(
                'before' => '1 year ago',
                'inclusive' => true,
            ),
        ),
        'post_type' => 'post',
        'post_status' => 'publish',
        'fields' => 'ids',
        'posts_per_page' => -1,
    );

    $old_posts = get_posts($args);

    foreach ($old_posts as $post_id) {
        if (wpdetect_filter_posts_to_delete($post_id)) {
            wp_delete_post($post_id, true);
        }
    }
}

Таким образом, можно защитить ключевой контент от удаления.

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

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

Как удалить неиспользуемые таблицы в базе данных WordPress
07.11.2025
Как создать автоматический снимок базы данных WordPress с помощью WPDetect
01.01.2026
Как использовать хуки для оптимизации WordPress
08.12.2025
Автоматическое отключение неиспользуемых виджетов в WordPress: практическое решение
16.01.2026
Как использовать WP-Cron для автоматизации задач в WordPress
17.12.2025