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

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

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

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

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

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

Автоматизация удаления записей с помощью PHP-кода

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

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

function wp1_delete_old_posts() {
    $date_threshold = date('Y-m-d H:i:s', strtotime('-1 year')); // записи старше 1 года

    $old_posts = get_posts(array(
        'date_query' => array(
            array(
                'before' => $date_threshold,
                'inclusive' => true,
            ),
        ),
        'post_type' => 'post',
        'post_status' => 'publish',
        'numberposts' => -1,
        'fields' => 'ids',
    ));

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

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

Регистрация задачи в WP Cron

Чтобы функция запускалась автоматически, нужно создать событие cron и хук:

function wp1_schedule_old_post_deletion() {
    if (!wp_next_scheduled('wp1_delete_old_posts_hook')) {
        wp_schedule_event(time(), 'daily', 'wp1_delete_old_posts_hook');
    }
}
add_action('wp', 'wp1_schedule_old_post_deletion');

add_action('wp1_delete_old_posts_hook', 'wp1_delete_old_posts');

Этот код задаёт ежедневный запуск функции удаления. Убедитесь, что на сайте работает WP Cron (обычно это по умолчанию).

Дополнительные настройки и безопасность

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

  • Перед внедрением кода сделайте резервную копию базы данных.
  • Если нужно сначала проверить, какие записи будут удалены, можно вывести их ID или заголовки вместо удаления.
  • Можно добавить фильтрацию по категориям или меткам, чтобы удалять только определённые типы контента.

Пример расширения функции фильтрацией по категории с ID 5:

'category' => 5,

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

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

  • Auto Delete Posts — позволяет настроить удаление записей по возрасту, статусу и категории через удобный интерфейс.
  • WP Bulk Delete — мощный инструмент для массового удаления по множеству условий, включая дату публикации, таксономии, метаданные.
  • Clearfy Pro — комплексный плагин для оптимизации и очистки WordPress, включая функции по удалению старого контента.

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

Пример расширенного кода с логированием удалённых записей

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

function wp1_delete_old_posts_with_log() {
    $date_threshold = date('Y-m-d H:i:s', strtotime('-1 year'));
    $old_posts = get_posts(array(
        'date_query' => array(
            array('before' => $date_threshold, 'inclusive' => true),
        ),
        'post_type' => 'post',
        'post_status' => 'publish',
        'numberposts' => -1,
        'fields' => 'ids',
    ));

    if (!empty($old_posts)) {
        $log_file = WP_CONTENT_DIR . '/old_posts_deleted.log';
        foreach ($old_posts as $post_id) {
            $title = get_the_title($post_id);
            wp_delete_post($post_id, true);
            error_log(date('[Y-m-d H:i:s]') . " Deleted post ID: $post_id, Title: $title\n", 3, $log_file);
        }
    }
}

Лог будет записан в файл wp-content/old_posts_deleted.log, что удобно для аудита.

Советы по интеграции с WPRemark для отзывов

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

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

Это поможет сохранить важные данные и не потерять обратную связь.

Итог

Автоматическое удаление старого контента — важная задача для поддержания производительности и актуальности WordPress-сайта. Вы можете реализовать её с помощью собственного кода и WP Cron, либо воспользоваться готовыми плагинами, например, WP Bulk Delete или Clearfy Pro. Обязательно тестируйте решения на резервной копии и учитывайте особенности вашего сайта, например, связанные отзывы или другие данные.

Как удалить автоматические черновики в WordPress по расписанию
14.02.2026
Как установить ограничение на число публикаций в WordPress для конкретного пользователя
21.02.2026
Как удалить пустые мета-данные из базы данных WordPress
16.01.2026
Как избежать проблем с AJAX в WordPress: практическое руководство
11.02.2026
Как автоматически очистить библиотеку медиа в WordPress от неиспользуемых файлов
28.03.2026