В процессе работы сайта на WordPress со временем накапливается множество устаревших или неактуальных записей, страниц и других типов контента. Это может замедлять работу сайта, создавать лишний «мусор» в базе данных и ухудшать SEO-показатели. В этой статье разберём, как реализовать автоматическое удаление старого контента в WordPress, используя стандартные механизмы и плагины, а также рассмотрим примеры кода для кастомных решений.
Зачем нужно удалять старый контент автоматически
Удаление старого контента помогает поддерживать сайт в актуальном состоянии, улучшает производительность и упрощает управление. Особенно это актуально для новостных сайтов, блогов с большим количеством постов, сайтов с пользовательским контентом и магазинам, где товары могут устаревать.
Ручная очистка занимает много времени и часто забывается, поэтому автоматизация этого процесса позволит экономить ресурсы и избежать ошибок.
Использование WP-Cron для автоматического удаления
WordPress включает встроенный механизм планировщика задач — WP-Cron, который позволяет запускать определённые функции по расписанию. Мы можем использовать его для удаления записей старше определённого срока.
Регистрация пользовательского крон-задачи
Для начала создадим функцию, которая будет удалять старые записи, и зарегистрируем её в системе WP-Cron.
function wpboard_delete_old_posts() {
$args = [
'date_query' => [
[
'column' => 'post_date',
'before' => '90 days ago',
],
],
'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 - удалить без перемещения в корзину
}
}
}
// Регистрируем событие при активации темы или плагина
function wpboard_schedule_delete_old_posts() {
if (!wp_next_scheduled('wpboard_daily_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wpboard_daily_delete_old_posts');
}
}
add_action('wp', 'wpboard_schedule_delete_old_posts');
// Привязываем функцию к событию
add_action('wpboard_daily_delete_old_posts', 'wpboard_delete_old_posts');
Данный код удаляет все публикации старше 90 дней каждый день. Вы можете изменить параметры, например, тип записи или период.
Отмена задачи при деактивации
Важно не забыть отменять крон-задачу, чтобы не оставлять лишние процессы при деактивации темы или плагина.
function wpboard_clear_scheduled_delete_old_posts() {
$timestamp = wp_next_scheduled('wpboard_daily_delete_old_posts');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpboard_daily_delete_old_posts');
}
}
// Используйте хук деактивации плагина или темы
// register_deactivation_hook(__FILE__, 'wpboard_clear_scheduled_delete_old_posts');
Удаление старого контента с помощью плагинов
Если не хочется писать код, можно воспользоваться готовыми плагинами. Рассмотрим несколько популярных решений:
- WP Bulk Delete — очень мощный плагин, который позволяет удалять посты, страницы, кастомные типы, комментарии по различным параметрам, включая дату публикации. Можно настроить регулярное удаление через планировщик.
- Auto Delete Posts — простой плагин, который удаляет записи старше заданного количества дней автоматически.
- Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wpboard.ru&utm_medium=article&utm_campaign=kak-sdelat-avtomaticheskoe-udaleniye-starogo-kontenta-v-wordpress) — многофункциональный плагин для оптимизации сайта, в том числе содержит инструменты для удаления и очистки базы данных.
При выборе плагина обращайте внимание на отзывы и совместимость с вашей версией WordPress.
Удаление не только записей, но и медиафайлов
Часто вместе с удалением постов стоит очистить и связанные с ними медиафайлы, чтобы не засорять хранилище.
Для этого можно расширить функцию удаления, добавив удаление вложений:
function wpboard_delete_old_posts_with_attachments() {
$args = [
'date_query' => [
[
'column' => 'post_date',
'before' => '90 days ago',
],
],
'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) {
// Получаем вложения
$attachments = get_attached_media('', $post_id);
foreach ($attachments as $attachment) {
wp_delete_attachment($attachment->ID, true);
}
wp_delete_post($post_id, true);
}
}
}
Это поможет полностью освободить место и поддерживать чистоту данных.
Советы по безопасности и резервному копированию
Автоматическое удаление контента — операция необратимая, поэтому крайне рекомендуется:
- Настроить регулярное резервное копирование сайта и базы данных;
- Тестировать скрипты удаления на тестовом сайте;
- Добавлять логирование действий удаления, чтобы отслеживать, что именно удаляется;
- Использовать безопасные методы удаления (например, сначала перемещать записи в корзину, а не удалять сразу).
Логирование и уведомления о выполнении удаления
Для контроля процесса полезно добавить логирование и отправку уведомлений на email администратора.
function wpboard_delete_old_posts_with_logging() {
$args = [
'date_query' => [
[
'column' => 'post_date',
'before' => '90 days ago',
],
],
'post_type' => 'post',
'post_status' => 'publish',
'fields' => 'ids',
'posts_per_page' => -1,
];
$old_posts = get_posts($args);
$deleted_count = 0;
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
if (wp_delete_post($post_id, true)) {
$deleted_count++;
}
}
}
if ($deleted_count > 0) {
$admin_email = get_option('admin_email');
wp_mail($admin_email, 'Удаление старого контента', "Автоматически удалено $deleted_count старых записей.");
}
}
add_action('wpboard_daily_delete_old_posts', 'wpboard_delete_old_posts_with_logging');
Так вы будете всегда в курсе, какие изменения происходят.
Выводы и рекомендации
Автоматическое удаление старого контента в WordPress — важный инструмент для поддержания производительности и актуальности сайта. Вы можете реализовать это как с помощью собственного кода через WP-Cron, так и используя готовые плагины. Обязательно тестируйте и делайте резервные копии, чтобы избежать потери важных данных.