Управление контентом — одна из важных задач любого сайта на WordPress. Особенно это касается крупных проектов, где ежедневно публикуется много записей и страниц. Старый и неактуальный контент может замедлять работу сайта, ухудшать SEO и создавать путаницу для пользователей. Поэтому автоматизация удаления устаревшего контента — важный инструмент для поддержания сайта в порядке.
Почему важно удалять старый контент в WordPress
Со временем на сайте накапливаются записи, которые теряют актуальность: новости, акции, устаревшие обзоры и прочее. Если их не удалять или не архивировать, это может привести к нескольким проблемам:
- Увеличение объёма базы данных и замедление работы сайта.
- Падение позиций в поисковых системах из-за большого количества неактуальных страниц.
- Негативный опыт пользователей, которые сталкиваются с устаревшей информацией.
Автоматизация удаления позволяет решить эти проблемы без лишних затрат времени на ручную чистку.
Настройка автоматического удаления старого контента через плагины
Плагин WP Auto Delete Posts
Один из удобных плагинов для автоматического удаления записей по возрасту — WP Auto Delete Posts. Он позволяет настроить удаление записей, страниц и произвольных типов записей по заданному количеству дней с момента публикации.
- Простой интерфейс для настройки правил удаления.
- Поддержка исключений по категориям и меткам.
- Возможность создавать расписание удаления с помощью WP-Cron.
После установки плагина перейдите в его настройки и задайте нужные параметры. Например, удалить все записи старше 365 дней, кроме тех, что в категории «Блог».
Плагин Auto Delete Posts & Pages
Другой вариант — Auto Delete Posts & Pages от WPShop. Он позволяет гибко настраивать автоматическое удаление с использованием пользовательских условий и фильтров.
Плагин поддерживает:
- Удаление записей по дате публикации.
- Исключения по типам записей и таксономиям.
- Отправку уведомлений на email перед удалением.
Автоматизация удаления с помощью собственного кода
Если нужен более точный контроль или вы хотите избежать использования плагинов, можно написать собственное решение на PHP. Рассмотрим пример функции, которая удаляет записи старше заданного количества дней.
Пример функции удаления старых записей
function wpconfig_delete_old_posts() {
$days = 180; // удалять записи старше 180 дней
$date_query = array(
array(
'column' => 'post_date',
'before' => date('Y-m-d', strtotime("-" . $days . " days")),
),
);
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => $date_query,
'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 — удаление без возможности восстановления
}
}
}
// Запускаем функцию по расписанию
if (!wp_next_scheduled('wpconfig_cron_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wpconfig_cron_delete_old_posts');
}
add_action('wpconfig_cron_delete_old_posts', 'wpconfig_delete_old_posts');Этот код выполняет удаление всех опубликованных записей старше 180 дней один раз в сутки. Для изменения логики можно менять параметры в $args — например, обрабатывать страницы или кастомные типы записей.
Добавление исключений по категориям и меткам
Чтобы не удалять записи из определённых категорий, добавим дополнительный аргумент tax_query:
$args['tax_query'] = array(
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => array('important', 'news'),
'operator' => 'NOT IN',
),
);Теперь записи, относящиеся к категориям important и news, будут исключены из удаления.
Безопасность и резервное копирование при удалении
Автоматическое удаление контента — серьёзная операция, требующая осторожности. Перед запуском скриптов или плагинов настоятельно рекомендуем:
- Сделать полное резервное копирование базы данных и файлов сайта.
- Тестировать удаление на тестовом сервере.
- Настроить уведомления администратору о выполнении удаления и количестве удалённых записей.
Плагины, такие как Auto Delete Posts & Pages, поддерживают отправку email-уведомлений, что значительно повышает контроль над процессом.
Дополнительные советы для работы с устаревшим контентом
Архивирование вместо удаления
В некоторых случаях лучше не удалять, а архивировать записи. Например, можно изменить статус публикации на private или draft, чтобы скрыть их от посетителей и поисковиков, но сохранить для внутреннего использования.
Использование плагинов для SEO и кэширования
Удаление старого контента лучше сочетать с оптимизацией SEO и кэширования. Например, плагины вроде Clearfy Pro помогают оптимизировать метаданные и ускорить загрузку страниц.
Логирование процессов удаления
Для отладки полезно вести лог действий скрипта удаления. Например, можно записывать ID удалённых записей и время удаления в отдельный файл или таблицу базы данных.
function wpconfig_log_deleted_post($post_id) {
$log_file = WP_CONTENT_DIR . '/logs/deleted_posts.log';
$entry = date('Y-m-d H:i:s') . " - Deleted post ID: " . $post_id . "\n";
file_put_contents($log_file, $entry, FILE_APPEND);
}
function wpconfig_delete_old_posts_with_log() {
$days = 180;
$date_query = array(
array(
'column' => 'post_date',
'before' => date('Y-m-d', strtotime("-" . $days . " days")),
),
);
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => $date_query,
'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);
wpconfig_log_deleted_post($post_id);
}
}
}
add_action('wpconfig_cron_delete_old_posts', 'wpconfig_delete_old_posts_with_log');