В крупных проектах на WordPress часто возникает потребность автоматически удалять или архивировать устаревший контент, особенно если сайт публикует чрезвычайные новости или объявления с ограниченным сроком актуальности. В этой статье мы разберём, как автоматизировать процесс удаления старых чрезвычайных постов, используя стандартные средства WordPress и несколько полезных плагинов. Вы получите готовые примеры кода с функциями, названными с префиксом wp3ru_ для удобства и избежания конфликтов.
Почему важна автоматизация удаления чрезвычайных постов
Если в вашем блоге или новостном сайте есть категория или метка для чрезвычайных сообщений, которые актуальны, например, 3-7 дней, то по истечении этого времени их не нужно просто скрывать — лучше удалять или архивировать. Это позволяет поддерживать чистоту базы данных, улучшить скорость работы сайта и избежать путаницы среди пользователей.
Ручное удаление таких постов — это трудозатратно и подвержено ошибкам, поэтому автоматизация с помощью WP Cron или плагинов — оптимальный вариант.
Как определить «чрезвычайный» пост для автодеалета
Для начала нужно однозначно помечать такие посты. Обычно используют:
- Специальную категорию, например, «Чрезвычайные»
- Метки (теги) — например,
emergency - Кастомное поле (мета-данные), например,
emergency_eventсо значением1
Выбор зависит от структуры сайта и удобства. В нашем примере будем считать, что чрезвычайные посты имеют метку emergency.
Использование WP Cron для автоматического удаления постов
Самый простой способ — создать планировщик задач, который будет запускаться, например, раз в сутки и удалять посты старше N дней с меткой emergency.
Пример функции для удаления старых чрезвычайных постов
function wp3ru_delete_old_emergency_posts() {
$days_to_keep = 7; // Сколько дней хранить чрезвычайные посты
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days_to_keep} days"));
$query = new WP_Query([
'post_type' => 'post',
'posts_per_page' => -1,
'tag' => 'emergency',
'date_query' => [
[
'column' => 'post_date',
'before' => $date_threshold,
],
],
'fields' => 'ids',
'post_status' => 'publish',
]);
if (!empty($query->posts)) {
foreach ($query->posts as $post_id) {
wp_delete_post($post_id, true); // true — удалить без перехода в корзину
}
}
}
Регистрация планировщика WP Cron
Чтобы функция запускалась автоматически раз в сутки, добавим хук:
function wp3ru_schedule_emergency_cleanup() {
if (!wp_next_scheduled('wp3ru_emergency_cleanup_event')) {
wp_schedule_event(time(), 'daily', 'wp3ru_emergency_cleanup_event');
}
}
add_action('wp', 'wp3ru_schedule_emergency_cleanup');
add_action('wp3ru_emergency_cleanup_event', 'wp3ru_delete_old_emergency_posts');
Эти фрагменты кода нужно добавить в файл functions.php вашей темы или в отдельный плагин.
Использование плагинов для автоматизации удаления и архивирования
Если вы не хотите писать код, можно воспользоваться плагинами, которые позволяют настроить автоматическую очистку старого контента по условиям.
Плагин WP Bulk Delete
WP Bulk Delete — мощный плагин для массового удаления постов с фильтрами по таксономиям, датам и мета-полям. Он позволяет настроить расписание удаления.
- Переходим в настройки плагина.
- Выбираем удаление по метке
emergency. - Указываем условие "старше 7 дней".
- Включаем расписание (например, ежедневно).
Подробнее и загрузка: https://wordpress.org/plugins/wp-bulk-delete/
Плагин Clearfy Pro для оптимизации и автоматизации
Clearfy Pro с пакетом оптимизаций может автоматизировать удаление ревизий, спама и временно неактуальных записей, если настроить кастомные правила. Для чрезвычайных постов можно использовать фильтры по меткам и времени.
Подробнее о Clearfy Pro: wpshop.ru/clearfy-pro
Дополнительные советы по безопасности и производительности
Удаление постов — операция необратимая, особенно с параметром wp_delete_post($post_id, true). Рекомендуется перед автоматическим удалением:
- Настроить резервное копирование сайта (например, с помощью плагина UpdraftPlus).
- Периодически проверять логи выполнения WP Cron и корректность удаления.
- Тестировать функцию на тестовом сайте перед запуском в продакшн.
Также учитывайте нагрузку: если у вас очень много чрезвычайных постов, лучше делать удаление порциями, например, по 20-50 записей за один запуск.
Как расширить функциональность: переводить старые чрезвычайные посты в статус черновика или архивировать
Если удаление категорически нежелательно, можно вместо удаления менять статус поста на draft или перемещать в другую категорию, например, «Архив чрезвычайных». Это позволит сохранить данные, но скрыть их с фронтенда.
Пример изменения статуса вместо удаления:
function wp3ru_archive_old_emergency_posts() {
$days_to_keep = 7;
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days_to_keep} days"));
$query = new WP_Query([
'post_type' => 'post',
'posts_per_page' => -1,
'tag' => 'emergency',
'date_query' => [
[
'column' => 'post_date',
'before' => $date_threshold,
],
],
'post_status' => 'publish',
]);
if (!empty($query->posts)) {
foreach ($query->posts as $post_id) {
wp_update_post([
'ID' => $post_id,
'post_status' => 'draft',
]);
}
}
}
Выводы и рекомендации
Автоматизация удаления старых чрезвычайных постов в WordPress значительно облегчает управление контентом и поддерживает производительность сайта. Используйте WP Cron для простых задач и плагин WP Bulk Delete для гибкой настройки. Не забывайте тестировать и создавать резервные копии.
Для удобной оптимизации и автоматизации можно дополнительно использовать Clearfy Pro, который поможет поддерживать ваш сайт в чистоте и порядке.