В процессе работы сайта на WordPress часто возникает необходимость автоматически удалять устаревшие посты, например, новости, акции или события, которые перестали быть актуальными. Ручное удаление — это долго и неудобно, особенно если контента много. В этой статье мы подробно разберём, как настроить автоматическое удаление постов по срокам с помощью готовых плагинов и собственного кода, чтобы процесс стал быстрым и безопасным.
Почему важно автоматизировать удаление устаревших постов
Публикация контента с ограниченным сроком актуальности — частая практика. Например, новостные статьи, анонсы мероприятий, скидки или спецпредложения. Если такие записи не удалять вовремя, они могут:
- засорять сайт и админ-панель;
- снижать качество пользовательского опыта, предлагая устаревшую информацию;
- отрицательно влиять на SEO, если много «мёртвых» страниц;
- усложнять поддержку и резервное копирование.
Автоматизация удаления решает эти проблемы, освобождая время и ресурсы.
Обзор плагинов для автоматического удаления постов по срокам
1. WP Auto Delete Posts
Очень простой и удобный плагин, позволяющий установить срок жизни поста в днях. После истечения срока запись удаляется или отправляется в корзину.
- Настройка по типу записи (пост, страница, кастомный тип);
- Выбор действия — удалить или в корзину;
- Фильтрация по категориям и тегам;
- Автоматический запуск через WP-Cron.
Плагин можно скачать и настроить с официального репозитория WordPress. При этом важно правильно настроить WP-Cron, чтобы удаления происходили регулярно.
2. Auto Post Scheduler
Плагин в основном предназначен для автоматического обновления и повторной публикации постов, но в настройках можно задать удаление постов после определённого времени. Подходит для управления большим объёмом контента.
3. Использование плагина Clearfy Pro для оптимизации
Если на сайте установлен Clearfy Pro от WPSHOP, можно использовать его функции для автоматизации и оптимизации работы с контентом, включая удаление устаревших элементов.
Реализация автоматического удаления устаревших постов в WordPress через код
Если вы хотите гибко настроить удаление, можно добавить кастомный PHP-код в файл functions.php вашей темы или в отдельный плагин. Ниже пример функции для удаления постов старше 30 дней.
function wpmeta_delete_old_posts() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => array(
array(
'column' => 'post_date',
'before' => '30 days ago',
),
),
'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('wpmeta_daily_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wpmeta_daily_delete_old_posts');
}
add_action('wpmeta_daily_delete_old_posts', 'wpmeta_delete_old_posts');Этот код:
- Ищет все опубликованные посты старше 30 дней;
- Безвозвратно удаляет их из базы данных;
- Запускает процесс ежедневно через WP-Cron.
Вы можете изменить период, заменив '30 days ago' на нужный интервал, например, '60 days ago'.
Расширение функционала: выбор удаления по категориям, типам и статусам
Чтобы не удалять все посты подряд, можно добавить фильтрацию по категориям или типам записей. Например, удалять только устаревшие записи из категории «Новости».
function wpmeta_delete_old_news() {
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'category_name' => 'novosti', // slug категории
'date_query' => array(
array(
'column' => 'post_date',
'before' => '30 days ago',
),
),
'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);
}
}
}
if (!wp_next_scheduled('wpmeta_daily_delete_old_news')) {
wp_schedule_event(time(), 'daily', 'wpmeta_daily_delete_old_news');
}
add_action('wpmeta_daily_delete_old_news', 'wpmeta_delete_old_news');Такой подход позволяет более точно контролировать, какой контент подлежит удалению.
Что нужно учесть при автоматическом удалении постов
Перед внедрением автоматического удаления обратите внимание на несколько важных моментов:
- Резервное копирование: обязательно делайте бэкапы базы данных, чтобы избежать потери важных данных.
- Тестирование: сначала протестируйте код или плагин на тестовом сервере.
- Уведомления: можно расширить функционал, добавив уведомления администратору о выполненных удалениях.
- Кэширование: после удаления постов очистите кэш сайта, чтобы обновления сразу отображались.
Заключение
Автоматизация удаления устаревших постов в WordPress существенно облегчает управление контентом и поддерживает актуальность сайта. Вы можете использовать готовые плагины, такие как WP Auto Delete Posts, или написать собственный код, адаптированный под ваши задачи. Важно тщательно настраивать процессы и контролировать их выполнение, чтобы не потерять нужные данные.
Если вы хотите расширить возможности управления контентом и оптимизации сайта, рекомендуем обратить внимание на решения от WPSHOP, включая плагины Clearfy Pro и WPMeta.