Управление контентом на сайте WordPress часто требует удаления устаревших записей или страниц, чтобы поддерживать актуальность и оптимизировать работу сайта. В этой статье мы разберем, как автоматизировать процесс удаления старого контента, используя PHP-код и плагины, а также рассмотрим практические советы для безопасного выполнения этой задачи.
Почему важно автоматизировать удаление старого контента в WordPress
Со временем контент на сайте может устаревать, особенно если речь идет о новостях, акциях, мероприятиях или временных публикациях. Ручное удаление таких записей занимает много времени и подвержено ошибкам. Автоматизация позволяет:
- Экономить время администратора сайта
- Поддерживать базу данных в актуальном состоянии
- Улучшать производительность сайта за счет удаления неактуальных данных
- Снижать риски публикации устаревшей информации
Для решения этой задачи мы можем использовать как встроенные возможности WordPress, так и сторонние плагины.
Использование WP Cron для автоматического удаления старого контента
WordPress имеет встроенный механизм планировщика задач — WP Cron. Его можно использовать для регулярного запуска функций удаления записей по определенным критериям.
Создаем функцию удаления старых записей
Пример функции, которая удаляет записи старше 180 дней:
function wpedu_delete_old_posts() {
$args = array(
'date_query' => array(
array(
'before' => date('Y-m-d', strtotime('-180 days')),
'inclusive' => true,
),
),
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'nopaging' => true,
);
$old_posts = get_posts($args);
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true); // true - для полного удаления
}
}Регистрируем событие WP Cron
Добавим планировщик для запуска функции один раз в день:
function wpedu_schedule_delete_old_posts() {
if (!wp_next_scheduled('wpedu_daily_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wpedu_daily_delete_old_posts');
}
}
add_action('wp', 'wpedu_schedule_delete_old_posts');
add_action('wpedu_daily_delete_old_posts', 'wpedu_delete_old_posts');Этот код нужно добавить в файл functions.php вашей темы или в кастомный плагин.
Использование плагинов для автоматизации удаления контента
Если вы предпочитаете не писать код, можно использовать готовые плагины, которые позволяют настраивать автоматическое удаление контента по различным параметрам.
1. Plugin: Auto Delete Posts
Позволяет удалять записи по возрасту, статусу и другим параметрам. Имеет гибкие настройки и удобный интерфейс.
2. Plugin: Clearfy Pro
Этот плагин оптимизирует WordPress и включает функции автоматического удаления устаревшего контента, а также очистки базы данных.
Как обезопасить процесс удаления и сделать его обратимым
Удаление контента — необратимая операция, особенно при использовании параметра wp_delete_post($post_id, true). Чтобы избежать потери важных данных, рекомендуем:
- Перед удалением создавать резервные копии базы данных
- Использовать статус «корзина» (по умолчанию WordPress сначала перемещает записи туда, что позволяет восстановить их)
- Тестировать функцию удаления на тестовом сайте
Если хочется сначала «архивировать» старый контент, можно изменить статус записей вместо удаления:
function wpedu_archive_old_posts() {
$args = array(
'date_query' => array(
array(
'before' => date('Y-m-d', strtotime('-180 days')),
'inclusive' => true,
),
),
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'nopaging' => true,
);
$old_posts = get_posts($args);
foreach ($old_posts as $post_id) {
wp_update_post(array(
'ID' => $post_id,
'post_status' => 'draft'
));
}
}Удаление старых медиафайлов вместе с записями
При удалении записей важно также очистить связанные с ними медиафайлы, чтобы не засорять сервер. Для этого можно использовать плагин Clearfy Pro, который умеет удалять неиспользуемые медиафайлы автоматически.
Если хотите реализовать это самостоятельно, можно использовать следующий подход:
function wpedu_delete_post_and_attachments($post_id) {
$attachments = get_attached_media('', $post_id);
foreach ($attachments as $attachment) {
wp_delete_attachment($attachment->ID, true);
}
wp_delete_post($post_id, true);
}
function wpedu_delete_old_posts_with_attachments() {
$args = array(
'date_query' => array(
array(
'before' => date('Y-m-d', strtotime('-180 days')),
'inclusive' => true,
),
),
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'nopaging' => true,
);
$old_posts = get_posts($args);
foreach ($old_posts as $post_id) {
wpedu_delete_post_and_attachments($post_id);
}
}Настройка удаления для кастомных типов записей
Если на вашем сайте используются кастомные типы записей, например, «мероприятия», «продукты» или «отзывы», алгоритм удаления можно адаптировать, заменив параметр 'post_type' => 'post' на нужный тип.
$args = array(
'post_type' => 'event', // название кастомного типа
'date_query' => array(
array('before' => date('Y-m-d', strtotime('-90 days'))),
),
'post_status' => 'publish',
'fields' => 'ids',
'nopaging' => true,
);Это позволяет гибко настраивать процесс удаления именно для тех данных, которые устаревают в вашем проекте.
Выводы и рекомендации для разработчиков
Автоматизация удаления старого контента — важный этап поддержки сайта на WordPress. Использование WP Cron в сочетании с кастомными функциями позволяет создавать точные и безопасные решения. Для быстрого старта рекомендуем обратить внимание на плагины Clearfy Pro и Auto Delete Posts.
Обязательно тестируйте решения на локальном или тестовом сервере, делайте резервные копии и учитывайте особенности вашего контента.