Если у вас большой сайт на WordPress с регулярно обновляемым контентом, рано или поздно возникает задача — удалить устаревшие записи, чтобы не загромождать базу данных и улучшить производительность. В этом руководстве мы рассмотрим, как автоматизировать удаление старого контента, используя системные возможности WordPress, плагины и собственные функции.
Почему важно удалять старый контент
Со временем на сайте накапливается много записей, которые теряют актуальность. Это могут быть новости, акции, временные страницы и пр. Удаление таких материалов помогает:
- Снизить нагрузку на базу данных
- Улучшить скорость загрузки страниц
- Повысить качество выдачи поисковых систем
- Упростить администрирование сайта
Особенно это важно для новостных сайтов и блогов с большим количеством постов.
Автоматизация удаления через WP-Cron и пользовательскую функцию
WordPress имеет встроенную систему планировщика заданий — WP-Cron. С её помощью можно запускать задачи по расписанию. Создадим задачу, которая будет удалять записи старше определённого возраста.
Создание функции удаления старого контента
Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:
function wpcommunity_delete_old_posts() {
$args = array(
'date_query' => array(
array(
'before' => '1 year ago', // Удалить записи старше 1 года
'inclusive' => true,
),
),
'post_type' => 'post',
'post_status' => 'publish',
'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 — удаляет без перемещения в корзину
}
}
}
В этом коде мы получаем ID всех опубликованных записей старше года и удаляем их безвозвратно.
Регистрация регулярного события WP-Cron
Далее нужно зарегистрировать задачу, которая будет запускать эту функцию. Добавьте в тот же файл:
function wpcommunity_schedule_old_post_deletion() {
if (!wp_next_scheduled('wpcommunity_delete_old_posts_event')) {
wp_schedule_event(time(), 'daily', 'wpcommunity_delete_old_posts_event');
}
}
add_action('wp', 'wpcommunity_schedule_old_post_deletion');
add_action('wpcommunity_delete_old_posts_event', 'wpcommunity_delete_old_posts');
Этот код запустит функцию удаления раз в сутки. Вы можете изменить интервал на 'hourly' или 'weekly'.
Использование готовых плагинов для удаления старого контента
Если не хотите писать код, можно использовать плагины. Вот несколько популярных решений:
- Auto Delete Posts — позволяет настроить автоудаление постов по дате публикации, категории, тегам и другим параметрам.
- WP Bulk Delete — мощный инструмент для массового удаления постов, страниц, пользовательских типов и метаданных с гибкими фильтрами.
- Simple Post Expiration — добавляет возможность установить дату истечения для постов, после которой они будут автоматически удалены или переведены в черновики.
Все эти плагины можно найти в репозитории WordPress. Для установки зайдите в админ-панель → Плагины → Добавить новый и введите название плагина.
Пример настройки WP Bulk Delete для удаления старых записей
После установки и активации перейдите в меню WP Bulk Delete. В разделе «Delete Posts» выберите условия фильтрации:
- Публикация старше 6 месяцев
- Опубликованные записи
- Категории или теги (если хотите ограничить удаление)
Запустите удаление вручную или настройте CRON задачу для автоматизации. Плагин поддерживает WP-Cron.
Особенности и рекомендации
Резервное копирование перед удалением
Удаление — необратимая операция (особенно при wp_delete_post($id, true)). Обязательно делайте резервные копии базы данных перед запуском автоматики. Для этого можно использовать плагин Clearfy Pro — он умеет создавать бэкапы и оптимизировать базу.
Логирование удалений
Чтобы контролировать процесс, добавьте логирование. Например, модифицируйте функцию удаления так:
function wpcommunity_delete_old_posts() {
$args = array(
'date_query' => array(
array('before' => '1 year ago', 'inclusive' => true),
),
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_posts = get_posts($args);
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
if (wp_delete_post($post_id, true)) {
error_log("[WPCommunity] Deleted post ID: " . $post_id);
}
}
}
}
Логи можно просматривать в файле debug.log, если включён WP_DEBUG_LOG.
Удаление не только постов, но и других типов контента
Если у вас на сайте используются кастомные типы записей, например, для мероприятий или отзывов, добавьте их в параметр post_type массива аргументов:
$args = array(
'post_type' => array('post', 'event', 'review'),
// остальные параметры
);
Так вы сможете удалять устаревший контент любых типов.
Заключение
Автоматизация удаления старого контента — важный элемент поддержания сайта на WordPress в хорошем состоянии. С помощью WP-Cron и кастомных функций вы можете настроить выполнение таких задач без вашего участия. Если не хотите углубляться в код — воспользуйтесь плагинами, например, WP Bulk Delete. Не забывайте о резервных копиях и логировании — это поможет избежать потерь данных и быстро отследить работу автоматизации.