wp-kurs.ru wordpress WP-Kurs

Автоматическое удаление старого контента в WordPress: практические методы и примеры кода

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

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

Со временем на сайте накапливаются записи, которые теряют смысл: устаревшие новости, акции, устаревшие статьи. Их хранение:

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

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

Как определить старый контент для удаления

В первую очередь нужно определить критерии, по которым контент будет признан устаревшим. Часто используют такие параметры:

  • Возраст записи — например, старше 1 года.
  • Статус публикации — опубликовано или черновик.
  • Категории или метки — например, устаревшие акции.
  • Кастомные поля — например, дата окончания события.

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

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

Самый гибкий способ — использовать WP Cron и собственный код в functions.php или в плагине для удаления записей по условию. Рассмотрим пример функции для удаления записей старше 365 дней.

function wp_kurs_delete_old_posts() {
    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'before' => '365 days ago',
            ),
        ),
        '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 — принудительное удаление без корзины
        }
    }
}

// Запускаем функцию еженедельно
add_action('wp_kurs_weekly_event', 'wp_kurs_delete_old_posts');

// Регистрируем cron событие при активации темы/плагина
function wp_kurs_activate_cron() {
    if (!wp_next_scheduled('wp_kurs_weekly_event')) {
        wp_schedule_event(time(), 'weekly', 'wp_kurs_weekly_event');
    }
}
add_action('wp', 'wp_kurs_activate_cron');

// Отмена cron события при деактивации
function wp_kurs_deactivate_cron() {
    $timestamp = wp_next_scheduled('wp_kurs_weekly_event');
    wp_unschedule_event($timestamp, 'wp_kurs_weekly_event');
}
register_deactivation_hook(__FILE__, 'wp_kurs_deactivate_cron');

В этом примере мы создаём событие WP Cron, которое еженедельно запускает функцию удаления всех опубликованных записей старше года. Обратите внимание на принудительное удаление wp_delete_post($post_id, true) — это удаляет пост без перемещения в корзину.

Настройка под кастомные типы записей и условия

Если у вас есть кастомные типы записей, например, «product» или «event», просто замените 'post_type' => 'post' на нужный тип. Также можно добавить дополнительные условия в date_query или использовать метаполя.

Плагины для автоматического удаления старого контента

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

1. WP Bulk Delete

Очень мощный плагин для массового удаления записей по разным условиям: по дате, категориям, меткам, статусу и т.д. Позволяет создавать расписания для регулярного удаления. Имеет удобный интерфейс.

Скачать: WP Bulk Delete на WPSHOP

2. Auto Post Scheduler

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

Скачать: Auto Post Scheduler на WPSHOP

Практические советы по безопасному удалению контента

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

  • Перед внедрением автоматического удаления сделайте полную резервную копию сайта и базы данных.
  • На начальном этапе используйте режим тестирования — вместо удаления выводите список постов, которые попадут под удаление.
  • Регулярно проверяйте логи и результаты работы скриптов.
  • Если важен SEO, подумайте о настройке редиректов с удаляемых URL на актуальные страницы.

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

function wp_kurs_test_old_posts() {
    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'date_query'     => array(
            array('before' => '365 days ago'),
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1
    );
    $old_posts = get_posts($args);
    echo '<pre>';
    print_r($old_posts);
    echo '</pre>';
}
// Используйте вызов этой функции на странице админки для проверки

Оптимизация базы данных после удаления

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

Оптимизация помогает удалить «мертвые» записи в таблицах и ускорить работу сайта.

Выводы и рекомендации

Автоматическое удаление старого контента — важная задача для поддержания актуальности и производительности WordPress-сайта. Используйте WP Cron и кастомный код для гибкости или проверенные плагины для удобства. Обязательно тестируйте и делайте резервные копии перед внедрением.

Если нужно быстро и удобно управлять массовым удалением, рекомендуем WP Bulk Delete. Для продвинутых пользователей идеально подходит собственный код с cron и кастомными условиями.

×
Делай сайт лучше!!

-20% на премиум темы и плагины

Использовать скидку ⋙