Автоматическое удаление старого контента — востребованная задача для многих владельцев сайтов на WordPress, особенно если регулярно публикуется много записей. Это помогает поддерживать сайт в актуальном состоянии, снизить нагрузку на базу данных и избежать проблем с производительностью. В этой статье разберём, как настроить автоматическую очистку контента по разным критериям: по дате, по категории, по типу записи и другим параметрам.
Зачем нужно автоматически удалять старый контент в WordPress
Со временем на сайте накапливается много устаревших записей — новости, акции, временные объявления. Если не удалять их, это:
- Замедляет работу сайта из-за увеличения объема базы данных.
- Ухудшает пользовательский опыт, так как посетители видят неактуальную информацию.
- Увеличивает затраты на резервное копирование и обслуживание.
Автоматизация этого процесса экономит время и снижает риски ошибок при ручном удалении.
Как удалить старый контент вручную через панель WordPress
Для небольших сайтов можно вручную удалить контент по дате через админку:
- Перейдите в раздел «Записи» или «Страницы».
- Отфильтруйте записи по дате публикации.
- Выберите записи и нажмите «Удалить».
Этот способ неудобен для большого количества записей и требует регулярного внимания.
Автоматизация удаления старого контента с помощью WP-Cron
Для автоматизации можно использовать встроенную систему задач WP-Cron и написать собственную функцию для удаления записей, превышающих заданный возраст. Рассмотрим пример кода.
Пример функции удаления записей старше 180 дней
function wpreset_delete_old_posts() {
$args = array(
'date_query' => array(
array(
'before' => '180 days ago',
'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) {
wp_delete_post($post_id, true); // true — удалить без возможности восстановления
}
}
}
// Планируем запуск функции раз в сутки
if (!wp_next_scheduled('wpreset_daily_old_post_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpreset_daily_old_post_cleanup');
}
add_action('wpreset_daily_old_post_cleanup', 'wpreset_delete_old_posts');Объяснение:
- Функция
wpreset_delete_old_postsищет все опубликованные записи старше 180 дней. - Используется
get_postsс параметромdate_query. - Все найденные записи удаляются без помещения в корзину.
- Задача планируется с помощью WP-Cron и запускается ежедневно.
Дополнительные фильтры для удаления контента
Вы можете настроить удаление по другим критериям, например:
Удаление по категории
function wpreset_delete_old_category_posts($category_slug) {
$args = array(
'category_name' => $category_slug,
'date_query' => array(
array('before' => '90 days ago'),
),
'posts_per_page' => -1,
'fields' => 'ids',
);
$posts = get_posts($args);
foreach ($posts as $id) {
wp_delete_post($id, true);
}
}Вызывайте эту функцию с нужным слагом категории, например wpreset_delete_old_category_posts('news');.
Удаление постов по пользовательскому типу записи
function wpreset_delete_old_custom_post_type($post_type, $days) {
$args = array(
'post_type' => $post_type,
'date_query' => array(
array('before' => "$days days ago"),
),
'posts_per_page' => -1,
'fields' => 'ids',
);
$posts = get_posts($args);
foreach ($posts as $id) {
wp_delete_post($id, true);
}
}Использование плагинов для автоматического удаления контента
Если не хотите писать код, можно воспользоваться плагинами с похожим функционалом.
Плагины для автоматического удаления записей
- Auto Delete Posts — позволяет создать правила удаления старых записей по дате и категории.
- Bulk Delete — продвинутый инструмент для массового удаления постов по разным условиям, включая пользовательские поля и таксономии.
- WPReset — в основном для восстановления сайта, но в связке с WP-Cron помогает автоматизировать очистку.
Выбирая плагин, учитывайте совместимость с вашей темой и другими плагинами, а также возможность настроить расписание задач.
Практические советы по безопасному удалению старого контента
Удаление записей — необратимая операция при wp_delete_post($id, true). Чтобы избежать потери важных данных:
- Перед автоматическим удалением делайте резервные копии базы данных, например, с помощью плагина WPReset.
- Сначала тестируйте функции на тестовом сайте или в локальной среде.
- Можно сначала отправлять посты в корзину, а не удалять полностью, чтобы иметь возможность восстановить их.
- Добавьте логику уведомления администратора о количестве удалённых записей.
Пример расширения функции с уведомлением и логированием
function wpreset_delete_old_posts_with_log() {
$args = array(
'date_query' => array(
array('before' => '180 days ago'),
),
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts($args);
$deleted_count = 0;
foreach ($old_posts as $post_id) {
if (wp_delete_post($post_id, true)) {
$deleted_count++;
}
}
if ($deleted_count > 0) {
$admin_email = get_option('admin_email');
wp_mail($admin_email, 'Отчёт об удалении старого контента', "Удалено записей: $deleted_count");
}
}
add_action('wpreset_daily_old_post_cleanup', 'wpreset_delete_old_posts_with_log');Так вы будете всегда в курсе, как работает автоматическая очистка.
Заключение
Автоматическое удаление старого контента в WordPress — важный этап поддержки сайта, позволяющий улучшить производительность и актуальность информации. Используйте WP-Cron для регулярного запуска, настраивайте фильтры по дате, категории и типам записей, а также не забывайте про резервное копирование. Для тех, кто не хочет писать код, подойдут готовые плагины, например, WPReset или Bulk Delete.