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

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

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

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

  • Снизить нагрузку на базу данных;
  • Улучшить навигацию по сайту;
  • Поддерживать актуальность контента;
  • Сделать SEO-оптимизацию более эффективной.

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

WordPress хранит дату последнего изменения поста в поле post_modified таблицы wp_posts. Мы можем использовать этот параметр, чтобы отобрать записи, которые не изменялись более, например, 1 года (365 дней).

Для этого создадим функцию wpdirect_delete_old_edited_posts(), которая будет искать такие посты и удалять их программно.

Пример функции удаления старых постов

function wpdirect_delete_old_edited_posts() {
    $days = 365; // количество дней для определения устаревших записей
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

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

    $old_posts = get_posts($args);

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

Данная функция ищет все опубликованные записи, которые не изменялись более года, и удаляет их окончательно. Можно изменить переменную $days для других периодов.

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

Для автоматизации можно использовать WP-Cron — встроенный в WordPress планировщик задач. Создадим событие, которое будет вызывать нашу функцию, например, раз в неделю.

Добавление WP-Cron задачи

function wpdirect_schedule_old_posts_deletion() {
    if (!wp_next_scheduled('wpdirect_weekly_delete_old_posts')) {
        wp_schedule_event(time(), 'weekly', 'wpdirect_weekly_delete_old_posts');
    }
}
add_action('wp', 'wpdirect_schedule_old_posts_deletion');

add_action('wpdirect_weekly_delete_old_posts', 'wpdirect_delete_old_edited_posts');

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

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

Удаление записей — критичная операция, поэтому рекомендуется:

  • Сделать резервную копию базы данных перед активацией автоматического удаления;
  • Добавить логирование удалённых постов для контроля;
  • Реализовать возможность отключения автоматического удаления через админку или константу.

Пример логирования удалённых постов

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

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

    $old_posts = get_posts($args);

    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            $title = get_the_title($post_id);
            if (wp_delete_post($post_id, true)) {
                error_log("[WPDirect] Удалён пост ID: $post_id, Заголовок: $title");
            }
        }
    }
}

Логи можно просматривать в файле wp-content/debug.log при включённом WP_DEBUG_LOG.

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

Если хочется готовое решение с настройками через интерфейс, рассмотрите плагины:

  • Clearfy Pro — включает расширенные инструменты оптимизации, в том числе авточистку контента;
  • WPCommunity — если вы используете соцсеть на WordPress, там есть функции управления устаревшим контентом.

Но если нужно точечное решение под свои задачи — код из статьи позволит гибко настроить процесс.

Итоговые рекомендации по автоматическому удалению старых редактированных постов

Автоматическое удаление устаревших постов в WordPress — простой способ поддерживать сайт в актуальном состоянии и оптимизировать работу сервера. Важно тщательно тестировать код и обязательно делать бэкапы. Используйте функцию wpdirect_delete_old_edited_posts() в сочетании с WP-Cron, чтобы настроить регулярные чистки.

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

Как установить и настроить WPRemark для отзывов в WordPress
05.04.2026
Как создать мультиязычный сайт на WordPress без плагинов
14.12.2025
Решение проблемы с отключением WooCommerce после обновления или миграции
18.04.2026
Как создать автоматические редиректы в WordPress без плагинов
06.02.2026
Как избежать проблем с кешированием в WordPress
10.02.2026