wpcodes.ru wordpress WP Codеs

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

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

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

Неактуальный контент на сайте — это не только лишний вес базы данных, но и снижение общей производительности. Чем больше записей и ревизий — тем дольше выполняются запросы к базе, медленнее работает админка. Кроме того, поисковые системы могут оценивать переизбыток устаревшей информации как негативный фактор.

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

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

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

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

Для этого можно использовать WP Cron и написать собственную функцию, которая будет запускаться по расписанию и удалять старые записи.

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

function wpcodes_delete_old_posts() {
    // Устанавливаем дату для удаления
    $date_threshold = date('Y-m-d H:i:s', strtotime('-180 days'));
    
    // Получаем ID постов старше 180 дней
    $old_posts = get_posts([
        'date_query' => [
            [
                'column' => 'post_date',
                'before' => $date_threshold,
            ],
        ],
        'post_type' => 'post',
        'post_status' => 'publish',
        'fields' => 'ids',
        'posts_per_page' => -1,
    ]);
    
    if (!empty($old_posts)) {
        foreach ($old_posts as $post_id) {
            wp_delete_post($post_id, true); // true для полного удаления
        }
    }
}

// Регистрируем крон задачу
add_action('wpcodes_daily_cleanup', 'wpcodes_delete_old_posts');

// Планируем ежедневный запуск, если не запланирован
if (!wp_next_scheduled('wpcodes_daily_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpcodes_daily_cleanup');
}

Этот код регистрирует ежедневное задание, которое удаляет все опубликованные посты старше 180 дней без возможности восстановления.

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

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

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

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

function wpcodes_delete_old_revisions() {
    global $wpdb;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-7 days'));
    $query = $wpdb->prepare(
        "DELETE FROM $wpdb->posts WHERE post_type = 'revision' AND post_date < %s",
        $date_threshold
    );
    $wpdb->query($query);
}
add_action('wpcodes_daily_cleanup', 'wpcodes_delete_old_revisions');

Удаление черновиков старше 30 дней

function wpcodes_delete_old_drafts() {
    $date_threshold = date('Y-m-d H:i:s', strtotime('-30 days'));
    $old_drafts = get_posts([
        'post_status' => 'draft',
        'post_type' => 'post',
        'date_query' => [
            [
                'column' => 'post_modified',
                'before' => $date_threshold,
            ],
        ],
        'fields' => 'ids',
        'posts_per_page' => -1,
    ]);
    if (!empty($old_drafts)) {
        foreach ($old_drafts as $post_id) {
            wp_delete_post($post_id, true);
        }
    }
}
add_action('wpcodes_daily_cleanup', 'wpcodes_delete_old_drafts');

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

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

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

Плагин WP-Optimize

WP-Optimize — популярный плагин, который позволяет очищать базу данных от ревизий, спам-комментариев, черновиков и других ненужных данных. В настройках можно включить автоматическую очистку по расписанию.

Подробности и установка: WP-Optimize на WPSHOP

Плагин Advanced Database Cleaner

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

Подробнее: Advanced Database Cleaner на WPSHOP

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

Важный аспект — очистка базы от спам-комментариев и старых неактивных комментариев. Их накопление также увеличивает размер БД и замедляет сайт.

Можно использовать следующий код для удаления спам-комментариев старше 14 дней:

function wpcodes_delete_old_spam_comments() {
    global $wpdb;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-14 days'));
    $query = $wpdb->prepare(
        "DELETE FROM $wpdb->comments WHERE comment_approved = 'spam' AND comment_date < %s",
        $date_threshold
    );
    $wpdb->query($query);
}
add_action('wpcodes_daily_cleanup', 'wpcodes_delete_old_spam_comments');

Так же можно очищать комментарии с определённым статусом или без активности.

Советы по безопасности и тестированию

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

Для этого можно добавить флаг и условие, например:

$dry_run = true; // true - только просмотр, false - удаление
if (!$dry_run) {
    wp_delete_post($post_id, true);
} else {
    error_log('Будет удалён пост ID: ' . $post_id);
}

Это поможет избежать ошибок и случайного удаления нужного контента.

Выводы

Автоматизация удаления старого контента — простой и эффективный способ поддерживать производительность и чистоту сайта на WordPress. Можно использовать собственный код с WP Cron или готовые плагины, такие как WP-Optimize и Advanced Database Cleaner. Важно тщательно тестировать и иметь резервные копии.

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

×

Создай идеальный сайт – теперь на 15% дешевле!

Подобрать тему →