В определённых проектах на WordPress возникает необходимость автоматически удалять устаревшие записи через заданный промежуток времени. Это помогает поддерживать актуальность контента, снижать нагрузку на базу данных и избегать переполнения сайта устаревшими данными. В этой статье мы подробно рассмотрим, как реализовать автоматическое удаление старых записей по дате публикации, используя как встроенные возможности WordPress, так и плагины, а также приведём примеры кода для кастомизации этого процесса.
Почему важно удалять старые записи в WordPress
Удаление устаревших записей полезно для сайтов с большим объёмом контента, таких как новостные порталы, блоги с обзорами, сайты с каталогами и KPI-отчётами, где информация быстро теряет актуальность. Это помогает:
- Снизить нагрузку на базу данных, ускорив работу сайта;
- Поддерживать релевантность контента для посетителей и поисковых систем;
- Автоматизировать рутинные процессы и избежать ручного контроля.
Однако важно учитывать, что удаление данных — операция необратимая, поэтому нужно тщательно продумывать правила удаления и делать резервные копии.
Основные способы автоматического удаления старых записей
Рассмотрим два основных подхода:
1. Использование WP-Cron для планирования удаления
WordPress имеет встроенную систему планировщика задач WP-Cron, через которую можно запускать свои функции по расписанию. Мы создадим функцию, которая будет удалять записи старше определённого количества дней.
2. Использование плагинов для автоматизации
Существуют готовые плагины, которые позволяют настроить автоматическое удаление постов по времени, например Auto Delete Posts. Также полезен плагин Clearfy Pro, который содержит инструменты оптимизации и управления контентом.
Пример реализации автоматического удаления старых записей через WP-Cron
Ниже представлен подробный пример кода, который можно добавить в файл functions.php вашей темы или в отдельный плагин:
/**
* Функция для удаления записей старше 30 дней
*/
function wpkpi_delete_old_posts() {
$days = 30; // количество дней
$date_query = array(
'before' => date('Y-m-d', strtotime("-{$days} days")),
'inclusive' => true,
);
$query_args = array(
'post_type' => 'post', // можно указать свой тип записи
'post_status' => 'publish',
'date_query' => array($date_query),
'fields' => 'ids', // получаем только ID
'posts_per_page' => -1,
);
$old_posts = get_posts($query_args);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true - без возможности восстановления
}
}
}
/**
* Регистрация Cron задачи
*/
function wpkpi_schedule_old_posts_deletion() {
if (!wp_next_scheduled('wpkpi_delete_old_posts_hook')) {
wp_schedule_event(time(), 'daily', 'wpkpi_delete_old_posts_hook');
}
}
add_action('wp', 'wpkpi_schedule_old_posts_deletion');
/**
* Привязка функции к Cron hook
*/
add_action('wpkpi_delete_old_posts_hook', 'wpkpi_delete_old_posts');
В этом коде мы создаём задачу, которая ежедневно удаляет записи старше 30 дней. По необходимости можно менять тип записей и период удаления.
Как проверить и отладить работу WP-Cron
WP-Cron зависит от посещений сайта, поэтому задачи могут запускаться не точно по времени. Для отладки рекомендуется установить плагин WP Crontrol, который позволяет просматривать, запускать и удалять Cron задачи вручную.
Использование плагинов для автоматизации удаления
Если вы не хотите писать код, можно использовать готовые решения:
- Auto Delete Posts — простой плагин для удаления постов по заданному времени. Позволяет выбрать типы записей, статусы и условия удаления.
- Clearfy Pro — продвинутый инструмент оптимизации, в котором есть модуль для очистки базы и управления контентом, включая удаление старых записей. Подробнее на официальном сайте.
Плагины имеют удобный интерфейс и подходят для тех, кто хочет быстро настроить автоматизацию без разработки.
Что учитывать при автоматическом удалении записей
Перед тем как включать автоматическое удаление, важно:
- Создать резервную копию сайта и базы данных;
- Проверить, что удаляются только нужные записи (например, только определённого типа или категории);
- Убедиться, что удаление не повлияет на структуру сайта и пользовательский опыт;
- Проинформировать команду, особенно если сайт многопользовательский.
Расширение функционала: удаление записей по метаполям и кастомным условиям
Иногда нужно удалять записи не только по дате, но и по другим условиям, например, по значению метаполя. Для этого можно расширить запрос в функции:
function wpkpi_delete_old_custom_posts() {
$days = 30;
$date_query = array(
'before' => date('Y-m-d', strtotime("-{$days} days")),
'inclusive' => true,
);
$meta_query = array(
array(
'key' => 'wpkpi_status',
'value' => 'archived',
'compare' => '=',
),
);
$query_args = array(
'post_type' => 'custom_post_type',
'post_status' => 'publish',
'date_query' => array($date_query),
'meta_query' => $meta_query,
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts($query_args);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true);
}
}
}
Такой подход позволяет гибко управлять удалением, например, удалять только записи с определённым статусом или тегом.
Заключение
Автоматическое удаление старых записей в WordPress — мощный инструмент для поддержания порядка и оптимизации сайта. С помощью WP-Cron и кастомных функций вы можете настроить гибкие правила удаления, а готовые плагины помогут быстро внедрить этот функционал без программирования. Помните про бэкапы и тестирование перед запуском в продакшене.