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

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

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

Накопление большого количества устаревшего контента негативно влияет на несколько аспектов работы сайта:

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

Регулярное удаление старых записей позволяет решить эти проблемы и поддерживать сайт в оптимальном состоянии.

Настройка автоматического удаления записей по дате с помощью кода

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

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

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

    $args = array(
        'date_query' => array(
            array(
                'before' => $date_threshold,
                'inclusive' => true,
            ),
        ),
        'post_type' => 'post',
        'post_status' => 'publish',
        'category_name' => 'novosti', // замените на нужную категорию или уберите для всех записей
        'fields' => 'ids',
        'posts_per_page' => -1
    );

    $old_posts = get_posts($args);

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

Этот код можно добавить в файл functions.php вашей темы или создать отдельный плагин.

Регистрация задачи WP-Cron для регулярного запуска

Чтобы функция запускалась автоматически, зарегистрируем событие WP-Cron:

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

add_action('wpweb_delete_old_posts_hook', 'wpweb_delete_old_posts');

Этот код планирует ежедневный запуск функции удаления старых записей.

Особенности и рекомендации при автоматическом удалении

Важно учитывать несколько нюансов:

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

Использование плагинов для автоматического удаления записей

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

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

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

Как расширить функционал: удаление записей по пользовательским условиям

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

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

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

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

    $old_posts = get_posts($args);

    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            if (get_comments_number($post_id) == 0) {
                wp_delete_post($post_id, true);
            }
        }
    }
}

Такой подход позволяет сохранить записи, которые продолжают заинтересовывать аудиторию, и удалить действительно устаревший и неактивный контент.

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

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

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

Как удалить или изменить метаданные продуктов WooCommerce без плагинов
02.06.2026
Как избежать проблем с кэшированием в WordPress
04.02.2026
Как отключить Emoji в WordPress для оптимизации сайта
17.01.2026
Как создать свой плагин для WordPress с нуля: пошаговое руководство
04.11.2025
Как избежать проблем с миграцией сайта WordPress на новый домен
17.02.2026