В процессе ведения сайта на WordPress часто возникает необходимость автоматически удалять устаревший или неактуальный контент. Это помогает поддерживать базу данных в чистоте, ускоряет работу сайта и освобождает место на сервере. В этой статье мы подробно рассмотрим, как реализовать автоматическое удаление старых записей и страниц без использования тяжелых плагинов, а также с помощью полезных инструментов из экосистемы WordPress.
Почему важно удалять старый контент в WordPress
Удаление старого контента — не просто способ освободить место. Прежде всего это влияет на производительность сайта и качество его индексации поисковыми системами. Ненужные записи могут замедлять запросы к базе данных, увеличивать время загрузки страниц и усложнять работу с сайтом администраторам.
Кроме того, регулярная очистка помогает избежать проблем с безопасностью, если в старом контенте остались уязвимости или устаревшие скрипты.
Наконец, автоматизация этого процесса экономит время и снижает вероятность человеческой ошибки.
Как работает удаление контента по дате в WordPress
WordPress хранит дату публикации каждой записи и страницы в базе данных. На основе этого параметра можно настроить удаление записей, которые старше определенного периода.
Для реализации нам понадобится создать функцию, которая будет запускаться по расписанию (например, раз в день) и удалять записи, опубликованные раньше установленного срока.
Создаем функцию удаления старых записей
Пример кода, который можно добавить в файл functions.php вашей темы или в отдельный плагин:
function wplessons_delete_old_posts() {
// Количество дней, после которых записи считаются устаревшими
$days_old = 90;
// Дата отсечения
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_old . ' days'));
// Получаем все публикации старше порога
$old_posts = get_posts(array(
'date_query' => array(
array(
'before' => $date_threshold,
),
),
'post_type' => 'post',
'post_status' => 'publish',
'numberposts' => -1,
'fields' => 'ids',
));
foreach ($old_posts as $post_id) {
// Удаляем запись без возможности восстановления
wp_delete_post($post_id, true);
}
}
Эта функция найдет все опубликованные записи старше 90 дней и удалит их полностью.
Настраиваем автоматический запуск с помощью WP-Cron
Чтобы функция запускалась регулярно, нужно добавить событие в WP-Cron:
// Регистрируем событие при активации темы или плагина
function wplessons_schedule_old_posts_deletion() {
if (!wp_next_scheduled('wplessons_delete_old_posts_hook')) {
wp_schedule_event(time(), 'daily', 'wplessons_delete_old_posts_hook');
}
}
add_action('wp', 'wplessons_schedule_old_posts_deletion');
// Хук для запуска функции
add_action('wplessons_delete_old_posts_hook', 'wplessons_delete_old_posts');
// Удаляем расписание при деактивации
function wplessons_unschedule_old_posts_deletion() {
$timestamp = wp_next_scheduled('wplessons_delete_old_posts_hook');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wplessons_delete_old_posts_hook');
}
}
Такой подход позволит автоматически очищать старые записи ежедневно без ручного участия.
Как расширить функциональность: удаление по пользовательским типам записей и категориям
В реальных проектах часто нужно не просто удалять все старые записи, а применить фильтрацию по типам постов или категориям. Например, удалять только записи блога, но не страницы или пользовательские типы.
Удаление старых пользовательских типов записей
В параметре post_type функции get_posts можно указать массив типов:
$old_custom_posts = get_posts(array(
'date_query' => array(
array(
'before' => $date_threshold,
),
),
'post_type' => array('post', 'your_custom_post_type'),
'post_status' => 'publish',
'numberposts' => -1,
'fields' => 'ids',
));
Далее удаление происходит по тому же принципу.
Удаление записей из определенной категории
Чтобы фильтровать по категориям, используйте параметр tax_query:
$old_posts_cat = get_posts(array(
'date_query' => array(
array(
'before' => $date_threshold,
),
),
'category_name' => 'news', // или 'cat' => ID категории
'post_status' => 'publish',
'numberposts' => -1,
'fields' => 'ids',
));
Так можно удалять старые записи только из нужных разделов сайта.
Использование плагинов для автоматического удаления старого контента
Если вы предпочитаете готовые решения, обратите внимание на плагины, которые упрощают работу с автоматической очисткой:
- Clearfy Pro — мощный набор инструментов для оптимизации и очистки WordPress. Поддерживает автоматическое удаление устаревших ревизий, мусора и постов по расписанию. Подробнее: https://wpshop.ru/plugins/clearfy-pro/
- WPRemark — плагин для управления комментариями и спамом, умеет автоматически удалять старые комментарии и записи.
Использование таких плагинов позволит вам настроить удаление через удобный интерфейс без программирования.
Практические рекомендации и меры предосторожности
Перед тем как внедрять автоматическое удаление, обязательно сделайте резервную копию базы данных. Это позволит восстановить информацию в случае ошибки.
Также рекомендуем создавать логи работы скрипта — например, записывать в файл или базу, какие записи были удалены и когда. Это поможет контролировать процесс и анализировать результаты.
Если у вас большой сайт с тысячами записей, не удаляйте все сразу — лучше разбивать процесс на партии по 50-100 записей, чтобы избежать перегрузки сервера. Для этого используйте параметры posts_per_page и циклы обработки.
Заключение
Автоматическое удаление старого контента в WordPress — полезная практика для поддержания сайта в оптимальном состоянии. С помощью простого кода и WP-Cron вы легко настроите регулярную очистку базы данных от устаревших записей, а при необходимости расширите функционал под свои задачи. Использование плагинов вроде Clearfy Pro поможет сделать процесс максимально удобным и безопасным.