Если ваш сайт на WordPress активно публикует новости и статьи, со временем может накопиться большое количество устаревшего контента, который больше не актуален и не приносит пользы SEO или посетителям. В таких случаях разумным решением будет автоматизация процесса удаления старых новостей по определённым критериям, например, по дате публикации. В этой статье рассмотрим, как настроить автоматическое удаление старого контента в WordPress с помощью кода и плагинов.
Зачем автоматически удалять старые новости в WordPress
Старые новости могут негативно влиять на восприятие сайта и его производительность. Вот основные причины для удаления устаревших записей:
- Оптимизация базы данных: чем меньше записей, тем быстрее работают запросы и меньше нагрузка на сервер.
- Актуальность контента: посетители видят только свежие и важные материалы.
- SEO-выгода: поисковые системы положительно оценивают сайты с качественным и релевантным контентом.
Однако удаление вручную — рутинная задача, особенно для крупных сайтов с сотнями новостей. Автоматизация экономит время и снижает вероятность ошибки.
Использование WP-Cron для автоматического удаления старых новостей
В WordPress есть встроенный механизм планировщика задач — WP-Cron. С его помощью можно настроить регулярное выполнение функций, например, удаления новостей старше определённого срока.
Пример функции для удаления записей старше 180 дней
Добавьте в файл functions.php вашей темы или в собственный плагин следующий код:
function wpnews_delete_old_posts() {
$days = 180; // удалять записи старше 180 дней
$date_query = array(
'before' => date('Y-m-d', strtotime("-{$days} days"))
);
$old_posts = get_posts(array(
'post_type' => 'post',
'date_query' => array($date_query),
'posts_per_page' => -1,
'fields' => 'ids',
'post_status' => 'publish'
));
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true - удаление без возможности восстановления
}
}
}
// Регистрация задачи в WP-Cron
if (!wp_next_scheduled('wpnews_daily_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wpnews_daily_delete_old_posts');
}
add_action('wpnews_daily_delete_old_posts', 'wpnews_delete_old_posts');
Этот код ежедневно запускает функцию wpnews_delete_old_posts, которая удаляет все опубликованные новости старше 180 дней.
Объяснение работы кода
- Используем
get_postsс параметромdate_query, чтобы получить ID записей, опубликованных до даты, которая на 180 дней раньше сегодняшнего дня. - Удаляем каждую запись с помощью
wp_delete_postс параметромtrueдля полного удаления без перемещения в корзину. - Задача регистрируется в WP-Cron с ежедневным интервалом.
Как проверить и отладить работу автоматического удаления
Для контроля работы скрипта можно добавить логирование:
function wpnews_delete_old_posts() {
$days = 180;
$date_query = array('before' => date('Y-m-d', strtotime("-{$days} days")));
$old_posts = get_posts(array(
'post_type' => 'post',
'date_query' => array($date_query),
'posts_per_page' => -1,
'fields' => 'ids',
'post_status' => 'publish'
));
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
$deleted = wp_delete_post($post_id, true);
if ($deleted) {
error_log("[wpnews] Удалена новость с ID: $post_id");
} else {
error_log("[wpnews] Ошибка при удалении новости с ID: $post_id");
}
}
} else {
error_log('[wpnews] Нет новостей для удаления');
}
}
Логи будут сохраняться в файл wp-content/debug.log при включённом режиме отладки WordPress (WP_DEBUG и WP_DEBUG_LOG).
Плагины для автоматического удаления старых записей
Если вы предпочитаете готовые решения, можно использовать плагины:
- Auto Delete Posts — позволяет настроить удаление записей по возрасту, категории и другим параметрам.
- Post Expirator — устанавливает дату окончания публикации записи и автоматически архивирует или удаляет её.
Эти плагины удобны для пользователей без навыков программирования и имеют гибкие настройки. Однако если нужна точная кастомизация — лучше использовать код.
Советы по безопасности и резервному копированию
Перед автоматическим удалением рекомендуем:
- Создавать резервные копии базы данных и файлов сайта, например, с помощью плагинов WPBackup или Clearfy Pro.
- Тестировать код на тестовом окружении перед применением на живом сайте.
- Временно включать логирование для отслеживания процесса удаления.
Расширение функционала: удаление только из выбранной категории
Если нужно удалять старые новости только из конкретной категории, например, "Архив", измените запрос так:
function wpnews_delete_old_posts_in_category() {
$days = 180;
$category_slug = 'archive';
$date_query = array('before' => date('Y-m-d', strtotime("-{$days} days")));
$old_posts = get_posts(array(
'post_type' => 'post',
'category_name' => $category_slug,
'date_query' => array($date_query),
'posts_per_page' => -1,
'fields' => 'ids',
'post_status' => 'publish'
));
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true);
}
}
}
Это позволит более точно контролировать, какие записи удалять.
Итоги
Автоматическое удаление старых новостей в WordPress — эффективный способ поддерживать сайт в актуальном состоянии и оптимизировать базу данных. Используйте WP-Cron для планирования задач или готовые плагины для удобства. Не забывайте о резервных копиях и тестировании, чтобы избежать потери важных данных.
Если хотите расширить функционал сайта и автоматизировать другие задачи — ознакомьтесь с плагинами WPRemark и Reboot с их возможностями для новостных сайтов.