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

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

Зачем нужна автоочистка записей и комментариев в WordPress

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

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

Как реализовать автоудаление записей по времени с помощью WPDir_cron_delete_posts()

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

function wpdir_cron_delete_posts() {
    $args = [
        'date_query' => [
            [
                'column' => 'post_date',
                'before' => '7 days ago',
            ],
        ],
        '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); // true — удаление без возможности восстановления
    }
}

add_action('wpdir_delete_old_posts_event', 'wpdir_cron_delete_posts');

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

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

Объяснение кода

В запросе get_posts через параметр date_query выбираются записи, дата публикации которых старше 7 дней назад. Далее в цикле вызывается wp_delete_post с флагом true для полного удаления.

Важно: если вы используете сторонние типы записей, например, из плагинов, можно добавить их в параметр 'post_type' массива $args, указав массив с нужными типами.

Автоматическое удаление комментариев старше 7 дней с помощью WPDir_cron_delete_comments()

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

function wpdir_cron_delete_comments() {
    global $wpdb;
    $wpdb->query(
        $wpdb->prepare(
            "DELETE FROM $wpdb->comments WHERE comment_date < %s",
            date('Y-m-d H:i:s', strtotime('-7 days'))
        )
    );
}
add_action('wpdir_delete_old_comments_event', 'wpdir_cron_delete_comments');

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

Здесь мы напрямую удаляем записи из таблицы комментариев, дата которых старше 7 дней. Такой способ быстрее, чем удалять комментарии по одному через API WordPress, но требует аккуратности и резервного копирования базы.

Предостережения и рекомендации

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

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

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

  • Auto Delete Posts — плагин для автоматического удаления записей по возрасту и другим параметрам.
  • Delete Expired Transients — помогает чистить устаревшие временные данные.
  • Clearfy Pro — расширенный инструмент оптимизации, в котором есть функции очистки базы, включая удаление устаревших данных.

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

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

Чтобы временно отключить автоматическое удаление, можно снять регистрацию cron-событий, например:

function wpdir_unschedule_cron_delete() {
    $timestamp = wp_next_scheduled('wpdir_delete_old_posts_event');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpdir_delete_old_posts_event');
    }
}
add_action('init', 'wpdir_unschedule_cron_delete');

Для изменения периода удаления достаточно скорректировать дату в параметре 'before' => '7 days ago' на нужное значение, например, '14 days ago' или '1 month ago'.

Выводы и рекомендации по автоудалению

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

Используйте встроенный WP-Cron для настройки регулярных задач, либо подключайте готовые плагины для более гибких настроек. Обязательно тестируйте и делайте резервные копии перед внедрением таких решений.

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

Как отключить XML-RPC в WordPress для повышения безопасности
23.03.2026
Автоматизация создания резервных копий в WordPress: плагины и кодовые решения
14.01.2026
Авто удаление записей и комментариев в WordPress через 7 дней
06.01.2026
WooCommerce: Автоматическое удаление товаров с оценками старше 30 дней
19.06.2026
Как добавить динамические параметры в URL в WordPress
30.03.2026