Как автоматизировать удаление старого контента в WordPress

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

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

Старый контент, который уже не актуален или не приносит трафик, может:

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

Автоматизация удаления помогает поддерживать сайт в чистоте без необходимости ручного мониторинга.

Как определить, какой контент удалить

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

  • Записи старше определённого времени (например, 1-2 года);
  • Черновики и авто-сохранения без активности;
  • Неопубликованные записи, не обновлявшиеся долгое время;
  • Ревизии, которые занимают место в базе;
  • Комментарии со статусом «спам» или «ожидающие» давно;
  • Пользователи, неактивные длительное время, если это применимо.

В зависимости от вашей ситуации, критерии могут варьироваться.

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

Для удаления записей старше, например, 365 дней, можно использовать wp_cron и функцию, которая будет регулярно запускаться и удалять такие записи.

Создание функции удаления старого контента

function wplock_delete_old_posts() {
    global $wpdb;
    $days = 365; // Количество дней
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    // Получаем ID постов, старше порога
    $old_posts = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM $wpdb->posts WHERE post_date < %s AND post_status='publish' AND post_type='post'",
        $date_threshold
    ));

    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            wp_delete_post($post_id, true); // true - удаление без возможности восстановления
        }
    }
}

Функция wplock_delete_old_posts() удаляет все опубликованные записи старше 365 дней без возможности восстановления.

Регистрация периодического задания через wp_cron

function wplock_schedule_old_posts_deletion() {
    if (!wp_next_scheduled('wplock_daily_old_posts_deletion')) {
        wp_schedule_event(time(), 'daily', 'wplock_daily_old_posts_deletion');
    }
}
add_action('wp', 'wplock_schedule_old_posts_deletion');
add_action('wplock_daily_old_posts_deletion', 'wplock_delete_old_posts');

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

Удаление старых ревизий для оптимизации базы данных

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

Функция для удаления ревизий старше определённого срока

function wplock_delete_old_revisions() {
    global $wpdb;
    $days = 90; // Удалять ревизии старше 90 дней
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $old_revisions = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM $wpdb->posts WHERE post_type='revision' AND post_date < %s",
        $date_threshold
    ));

    if (!empty($old_revisions)) {
        foreach ($old_revisions as $revision_id) {
            wp_delete_post($revision_id, true);
        }
    }
}
add_action('wp_scheduled_delete', 'wplock_delete_old_revisions');

Подключение к хуку wp_scheduled_delete позволяет запускать очистку ревизий вместе с другими системными задачами WordPress.

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

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

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

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

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

Черновики и неопубликованные записи долгое время могут занимать место и создавать беспорядок.

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

function wplock_delete_old_drafts() {
    global $wpdb;
    $days = 30;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $old_drafts = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM $wpdb->posts WHERE post_status='draft' AND post_date < %s",
        $date_threshold
    ));

    if (!empty($old_drafts)) {
        foreach ($old_drafts as $draft_id) {
            wp_delete_post($draft_id, true);
        }
    }
}
add_action('wp_scheduled_delete', 'wplock_delete_old_drafts');

Подключение к wp_scheduled_delete гарантирует регулярное выполнение задачи.

Удаление старых комментариев и спама с помощью WPRemark

Комментарии со спамом или неактивные комментарии также могут накапливаться. Плагин WPRemark позволяет эффективно управлять комментариями и автоматизировать очистку спама и старых комментариев.

Пример кода для удаления комментариев старше 180 дней

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

    $old_comments = $wpdb->get_col($wpdb->prepare(
        "SELECT comment_ID FROM $wpdb->comments WHERE comment_date < %s",
        $date_threshold
    ));

    if (!empty($old_comments)) {
        foreach ($old_comments as $comment_id) {
            wp_delete_comment($comment_id, true);
        }
    }
}
add_action('wp_scheduled_delete', 'wplock_delete_old_comments');

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

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

Важно протестировать все функции на тестовом сайте, прежде чем запускать на боевом. Вот рекомендации:

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

Пример логирования удаления:

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

    $old_posts = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM $wpdb->posts WHERE post_date < %s AND post_status='publish' AND post_type='post'",
        $date_threshold
    ));

    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            if (wp_delete_post($post_id, true)) {
                error_log('wplock: Deleted post ID ' . $post_id);
            }
        }
    }
}

Заключение

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

Как удалить неиспользуемые изображения в WordPress
21.11.2025
Как добавить свои метаданные в WordPress
16.11.2025
Как сделать автоподсказку в поиске WordPress
25.02.2026
Как сделать отладку в WordPress с помощью Xdebug
25.11.2025
Как удалить неактивные комментарии в WordPress: эффективные способы очистки базы
03.02.2026