В работе с WordPress часто возникает задача автоматически удалять устаревший контент. Особенно это актуально для новостных сайтов, блогов с временными акциями или ресурсах, где важна актуальность информации. В этой статье мы подробно рассмотрим, как автоматизировать удаление старых постов в WordPress по дате публикации с помощью кода и плагинов.
Почему стоит автоматизировать удаление старого контента в WordPress
Автоматизация удаления устаревших записей помогает поддерживать актуальность сайта, улучшать скорость работы базы данных и облегчать управление контентом. Ручное удаление занимает время и не всегда выполняется регулярно, что может привести к накоплению неактуального материала.
Кроме того, удаление старых записей снижает нагрузку на хостинг и уменьшает размер резервных копий, что особенно важно для больших проектов.
Наконец, автоматизация позволяет избежать ошибок и забывчивости, так как процесс четко регламентирован и выполняется по расписанию.
Как работать с WP Cron для автоматического удаления постов
WordPress имеет встроенную систему планировщика задач — WP Cron, позволяющую запускать PHP-функции по расписанию. Мы можем написать функцию, которая будет удалять посты старше определенного времени, и привязать её к событию cron.
Шаг 1. Написание функции удаления старых постов
Для начала создадим функцию wpscan_delete_old_posts(), которая найдёт и удалит записи старше заданного количества дней.
function wpscan_delete_old_posts() {
$days = 180; // Удалять посты старше 180 дней
$date_query = array(
array(
'column' => 'post_date',
'before' => "$days days ago",
),
);
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'date_query' => $date_query,
'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 — принудительное удаление без корзины
}
}
}
Функция ищет все опубликованные записи старше 180 дней и удаляет их.
Шаг 2. Регистрация задачи WP Cron
Теперь нужно зарегистрировать задачу, которая будет запускать эту функцию, например, раз в сутки.
function wpscan_register_cron_event() {
if (!wp_next_scheduled('wpscan_daily_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wpscan_daily_delete_old_posts');
}
}
add_action('wp', 'wpscan_register_cron_event');
add_action('wpscan_daily_delete_old_posts', 'wpscan_delete_old_posts');
Таким образом, при активном вордпресс-сайте функция wpscan_delete_old_posts() будет вызываться ежедневно.
Использование плагинов для удаления старого контента
Если вы предпочитаете не писать код, есть несколько плагинов для автоматизации удаления постов по дате:
- Auto Post Delete — позволяет настроить удаление записей и страниц старше заданного срока. Можно выбрать типы постов, категории и другие параметры.
- Post Expirator — плагин, который позволяет задать дату истечения жизни для каждой записи. По истечении срока пост можно автоматически удалить, изменить статус или переместить в черновики.
- WP Bulk Delete — мощный инструмент для массового удаления записей по различным условиям, включая дату публикации.
Все эти плагины доступны на WPSHOP.ru с удобной установкой и поддержкой.
Какие подводные камни и нюансы следует учитывать
Удаление старых постов — операция серьезная, и нужно учитывать ряд моментов:
- Резервное копирование. Перед автоматическим удалением обязательно настройте регулярное резервное копирование базы данных и файлов, чтобы можно было восстановить случайно удалённый контент.
- Влияние на SEO. Удаление большого количества страниц может повлиять на индексацию сайта. Рассмотрите возможность перенаправления удалённых URL на релевантные страницы или вывод пользовательского сообщения.
- Связанные данные. При удалении постов учитывайте, что могут оставаться комментарии, метаданные или ссылки на эти записи. Проверьте, чтобы не осталось «битых» ссылок.
- Проверка нагрузки. Запуск массового удаления на больших сайтах может вызвать нагрузку на сервер. Лучше выполнять такие операции в «тихое» время, либо разбивать удаление на части.
Расширение функционала: удаление старых постов по категориям и другим условиям
Иногда нужно удалять только записи из определённых категорий или с кастомными полями. Рассмотрим, как расширить функцию для удаления постов из категории "Новости" старше 90 дней.
function wpscan_delete_old_news_posts() {
$days = 90;
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'category_name' => 'novosti', // слаг категории
'date_query' => array(
array('column' => 'post_date', 'before' => "$days days ago"),
),
'fields' => 'ids',
'posts_per_page' => -1,
);
$posts = get_posts($args);
if (!empty($posts)) {
foreach ($posts as $post_id) {
wp_delete_post($post_id, true);
}
}
}
Такой подход позволяет гибко управлять удалением и учитывать структуру сайта.
Заключение
Автоматическое удаление старых постов в WordPress помогает поддерживать сайт в актуальном состоянии и оптимизировать работу базы данных. Использование WP Cron и написание простой функции — эффективное и гибкое решение. Плагины дают возможность упростить задачу при отсутствии навыков программирования.
Обязательно тестируйте функции на тестовом сервере и делайте резервные копии перед внедрением на рабочий сайт. Для удобной установки плагинов и качественной поддержки рекомендую использовать WPSHOP.ru.