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

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

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

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

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

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

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

Удаление через wp-cron и пользовательскую функцию

Самый гибкий способ — написать собственный код, который будет запускаться по расписанию и удалять записи старше определённого срока. Для этого создадим функцию и привяжем её к событию wp-cron.

function wpstuff_delete_old_posts() {
    global $wpdb;
    $days = 180; // Удалять записи старше 180 дней
    $date = 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 AND post_status = 'publish' AND post_type = 'post'",
        $date
    ));

    if (!empty($post_ids)) {
        foreach ($post_ids as $post_id) {
            wp_delete_post($post_id, true); // true - удаление без корзины
        }
    }
}

// Регистрируем событие, если оно ещё не зарегистрировано
if (!wp_next_scheduled('wpstuff_daily_delete_old_posts')) {
    wp_schedule_event(time(), 'daily', 'wpstuff_daily_delete_old_posts');
}

add_action('wpstuff_daily_delete_old_posts', 'wpstuff_delete_old_posts');

Этот код удалит все опубликованные записи старше 180 дней. Вы можете изменить значение переменной $days под свои задачи.

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

Если нет желания писать код, можно воспользоваться плагинами с похожим функционалом. Например:

  • Clearfy Pro — имеет функции оптимизации и очистки базы данных, включая удаление старого контента;
  • WPRemark — инструмент для управления комментариями и спамом, может помочь с автоматизацией удаления;

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

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

Добавление фильтра по категориям и типам записей

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

$post_ids = $wpdb->get_col($wpdb->prepare(
    "SELECT ID FROM {$wpdb->posts} WHERE post_date < %s AND post_status = 'publish' AND post_type = 'post' AND ID IN (
        SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id = %d
    )",
    $date, $category_id
));

Здесь $category_id — ID категории, записи из которой подлежат удалению.

Использование статуса "В корзине" перед окончательным удалением

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

Для этого замените wp_delete_post($post_id, true); на wp_trash_post($post_id);. Далее можно настроить отдельный скрипт, который будет очищать корзину.

Логирование удалённых записей

Для контроля полезно вести лог удалённых записей. Пример записи в файл:

function wpstuff_log_deleted_post($post_id) {
    $log_file = WP_CONTENT_DIR . '/wpstuff_deleted_posts.log';
    $post = get_post($post_id);
    $log_entry = date('Y-m-d H:i:s') . " - Deleted post ID: {$post_id}, Title: {$post->post_title}\n";
    file_put_contents($log_file, $log_entry, FILE_APPEND);
}

// Вызов логирования внутри цикла удаления
foreach ($post_ids as $post_id) {
    wp_delete_post($post_id, true);
    wpstuff_log_deleted_post($post_id);
}

Дополнительные советы по управлению устаревшим контентом

Архивирование вместо удаления

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

Оптимизация базы данных после удаления

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

Автоматизация с помощью WP CLI

Для опытных пользователей удобен WP CLI — командная строка для управления WordPress. Команда для удаления постов по дате:

wp post delete $(wp post list --post_type=post --post_status=publish --date_query='before=180 days ago' --field=ID) --force

Это можно запускать из cron на сервере для регулярного удаления записей.

Выводы и лучшие практики

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

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

Как использовать WPRemark для автоматического комментирования в WordPress
07.01.2026
Как создать адаптивный шаблон WordPress с нуля
31.10.2025
Как создать автоматический импорт контента в WordPress с помощью WP REST API и плагинов
05.02.2026
Отладка и оптимизация загрузки библиотек в WordPress
30.12.2025
Как удалить неиспользуемые таксономии в WordPress
25.02.2026