Ведение сайта на WordPress подразумевает постоянное обновление контента, однако часто накапливается много устаревших записей, которые уже неактуальны и могут замедлять работу сайта. В этой статье разберём, как автоматизировать удаление старого контента, ориентируясь на типы постов и даты публикации, используя собственные функции и подходящие плагины.
Почему важно удалять старый контент и как это влияет на производительность
С течением времени на сайте появляются записи, которые теряют актуальность: просроченные акции, устаревшие новости, закрытые проекты и т.д. Их наличие может негативно сказаться на SEO, нагрузке на базу данных и общем восприятии сайта пользователями. Регулярное удаление таких записей помогает:
- Снизить нагрузку на базу данных;
- Улучшить скорость отклика сайта;
- Поддерживать чистоту и актуальность контента;
- Избежать путаницы и негативного опыта пользователей.
Автоматизация этого процесса особенно важна для крупных сайтов и проектов с большим объёмом контента.
Настройка автоматического удаления постов по дате и типу с помощью кастомного кода
Для автоматизации удаления мы можем использовать системный cron WordPress — WP-Cron. Ниже пример функции, которая удаляет записи определённого типа старше заданного количества дней.
Создание функции удаления старых постов
function wptool_delete_old_posts() {
// Задаём типы постов для удаления
$post_types = array('post', 'custom_post_type');
// Задаём возраст поста в днях
$days = 180;
$args = array(
'post_type' => $post_types,
'post_status' => 'publish',
'date_query' => array(
array(
'before' => date('Y-m-d', strtotime('-' . $days . ' days')),
'inclusive' => true,
),
),
'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 - принудительное удаление без корзины
}
}
}В этой функции мы получаем ID всех публикаций, которые старше 180 дней, и удаляем их принудительно.
Добавление задачи в WP-Cron для регулярного запуска
function wptool_schedule_old_posts_deletion() {
if (!wp_next_scheduled('wptool_daily_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wptool_daily_delete_old_posts');
}
}
add_action('wp', 'wptool_schedule_old_posts_deletion');
add_action('wptool_daily_delete_old_posts', 'wptool_delete_old_posts');Этот код создаёт ежедневное задание, которое будет запускать функцию удаления.
Уточнение удаления по дополнительным параметрам и таксономиям
Часто нужно удалять не просто старый контент, а, например, только записи определённой категории или метки. Для этого расширим запрос:
$args['tax_query'] = array(
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => array('old-content', 'archive'),
'operator' => 'IN',
),
);Так можно гибко настраивать критерии удаления.
Использование плагинов для автоматического удаления контента
Если вы не хотите писать код, существуют плагины, которые помогают с автоматизацией удаления:
- Auto Delete Posts — позволяет настроить удаление постов по дате, статусу и меткам через интерфейс без кода.
- WP Bulk Delete — мощный инструмент для удаления постов, страниц, пользователей и т.п. с множеством фильтров и расписанием заданий.
Оба плагина поддерживают запланированное удаление и позволяют избежать лишних действий вручную.
Рекомендации по безопасности и резервному копированию перед автоматическим удалением
Автоматическое удаление — процесс необратимый, особенно при принудительном удалении без корзины. Чтобы избежать потери важных данных, обязательно:
- Настройте регулярное резервное копирование сайта и базы данных.
- Тестируйте функцию удаления на тестовом сайте.
- Включите логирование удалённых записей для контроля.
Для резервного копирования можно использовать плагин Clearfy Pro, который автоматизирует различные задачи оптимизации и безопасности.
Пример расширения функции: логирование удалённых постов
function wptool_delete_old_posts() {
$post_types = array('post', 'custom_post_type');
$days = 180;
$args = array(
'post_type' => $post_types,
'post_status' => 'publish',
'date_query' => array(
array(
'before' => date('Y-m-d', strtotime('-' . $days . ' days')),
'inclusive' => true,
),
),
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts($args);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
$post_title = get_the_title($post_id);
$post_date = get_the_date('Y-m-d', $post_id);
if (wp_delete_post($post_id, true)) {
error_log("[wptool] Удалён пост ID: $post_id, Заголовок: $post_title, Дата: $post_date");
}
}
}
}Так вы будете видеть в логе, какие записи были удалены и когда.
Итоги и практические советы
Автоматизация удаления устаревшего контента — важный шаг для поддержания здоровья сайта. Использование WP-Cron вместе с кастомным кодом даёт гибкость и контроль, а плагины — удобство и функциональность без программирования.
Перед внедрением обязательно тестируйте и делайте резервные копии. При правильной настройке вы избавитесь от лишнего мусора на сайте и улучшите его производительность.