В процессе эксплуатации сайтов на WordPress часто возникает необходимость автоматизировать удаление устаревшего контента — будь то записи, страницы, черновики или медиафайлы. Ручная очистка занимает много времени и часто забывается, что может негативно сказаться на производительности и безопасности сайта. В этой статье подробно рассмотрим, как грамотно настроить автоматическое удаление старых записей и другого ненужного контента с помощью кода и плагинов.
Почему важно удалять старый контент в WordPress
Удаление устаревших материалов на сайте помогает:
- Поддерживать актуальность информации и улучшать UX.
- Оптимизировать размер базы данных и повысить скорость загрузки сайта.
- Уменьшить риски безопасности, связанные с заброшенными материалами.
- Снизить нагрузку на сервер и улучшить SEO за счет чистого и релевантного контента.
Автоматизация этого процесса позволяет сэкономить время и избежать ошибок, особенно на крупных ресурсах с большим количеством записей.
Настройка автоматического удаления старых записей с помощью WP Cron
Чтобы регулярно удалять записи старше определённого срока, можно использовать встроенный планировщик задач WordPress — WP Cron. Ниже пример функции, которая удаляет записи старше 180 дней:
function wpdigest_delete_old_posts() {
global $wpdb;
$days = 180; // Срок в днях
$date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
// Получаем ID постов для удаления
$posts_to_delete = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_date < %s AND post_type = 'post' AND post_status = 'publish'",
$date
));
foreach ($posts_to_delete as $post_id) {
wp_delete_post($post_id, true); // true — удалить без возможности восстановления
}
}
// Планируем событие, если оно не запланировано
if (!wp_next_scheduled('wpdigest_delete_old_posts_hook')) {
wp_schedule_event(time(), 'daily', 'wpdigest_delete_old_posts_hook');
}
// Хук для выполнения функции
add_action('wpdigest_delete_old_posts_hook', 'wpdigest_delete_old_posts');
Этот код можно добавить в файл functions.php вашей темы или в отдельный плагин. Он будет ежедневно запускать удаление публикаций старше 180 дней.
Как изменить параметры удаления
Вы можете менять тип постов post_type на page или на собственные типы, а также статус post_status (например, draft, pending) для более гибкой очистки.
Автоматическое удаление черновиков и ревизий для чистки базы данных
Черновики и ревизии накапливаются со временем и могут занимать значительный объем в базе данных. Чтобы их удалять автоматически, можно использовать следующий код:
function wpdigest_auto_delete_drafts_and_revisions() {
global $wpdb;
$days = 30; // Удалять материалы старше 30 дней
$date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
// Удаляем черновики
$wpdb->query($wpdb->prepare(
"DELETE FROM $wpdb->posts WHERE post_status = 'draft' AND post_modified < %s",
$date
));
// Удаляем ревизии
$wpdb->query($wpdb->prepare(
"DELETE FROM $wpdb->posts WHERE post_type = 'revision' AND post_modified < %s",
$date
));
}
// Запускаем каждодневное событие
if (!wp_next_scheduled('wpdigest_delete_drafts_revisions_hook')) {
wp_schedule_event(time(), 'daily', 'wpdigest_delete_drafts_revisions_hook');
}
add_action('wpdigest_delete_drafts_revisions_hook', 'wpdigest_auto_delete_drafts_and_revisions');
Этот код эффективно очищает базу от ненужных черновиков и ревизий, помогая снизить нагрузку и увеличить скорость работы сайта.
Плагины для автоматизации удаления старого контента
Если вы предпочитаете решение без кода, обратите внимание на проверенные плагины:
- Clearfy Pro — оптимизирует работу сайта, включая автоматическую очистку базы от мусора, ревизий, черновиков и неиспользуемых данных.
- WPRemark — плагин для управления комментариями и удалением спама, что тоже важно для поддержания чистоты сайта.
Оба плагина предоставляют удобное управление и гибкие настройки, что подходит для большинства проектов.
Удаление старых медиафайлов: как автоматизировать
Медиафайлы, которые не используются в записях или страницах, занимают место на сервере. Их удаление вручную занимает много времени, но это можно автоматизировать.
Пример решения на PHP, которое удаляет неиспользуемые изображения:
function wpdigest_delete_unused_attachments() {
$args = [
'post_type' => 'attachment',
'post_status' => 'inherit',
'posts_per_page' => -1,
];
$attachments = get_posts($args);
foreach ($attachments as $attachment) {
$attachment_id = $attachment->ID;
$file = get_attached_file($attachment_id);
// Проверяем, используется ли вложение в контенте
$query = new WP_Query([
'post_type' => 'any',
'meta_query' => [
[
'key' => '_thumbnail_id',
'value' => $attachment_id,
'compare' => '=',
],
],
's' => basename($file),
]);
if (!$query->have_posts()) {
// Удаляем вложение
wp_delete_attachment($attachment_id, true);
}
}
}
if (!wp_next_scheduled('wpdigest_delete_unused_attachments_hook')) {
wp_schedule_event(time(), 'weekly', 'wpdigest_delete_unused_attachments_hook');
}
add_action('wpdigest_delete_unused_attachments_hook', 'wpdigest_delete_unused_attachments');
Данный код запускается раз в неделю и удаляет вложения, которые не связаны с содержимым сайта. Это поможет значительно сэкономить дисковое пространство.
Логирование и безопасность при автоматическом удалении
Рекомендуется вести лог удалённых элементов, чтобы при необходимости можно было восстановить данные или проанализировать процесс. Один из простых способов — записывать ID и дату удаления в отдельный файл или таблицу базы данных.
Также важно внимательно тестировать код на тестовом сервере, чтобы избежать случайного удаления нужного контента. Используйте механизм резервного копирования перед внедрением таких автоматизаций.
Итоги и рекомендации
Автоматизация удаления старого контента в WordPress — ключевой элемент поддержания сайта в оптимальном состоянии. Использование WP Cron и кастомных функций позволяет гибко настраивать очистку под любые нужды. Для тех, кто предпочитает готовые решения, плагины Clearfy Pro и WPRemark помогут быстро и безопасно реализовать автоматизацию.
Не забывайте о тестировании и резервном копировании — это обязательные этапы при работе с автоматическими удалениями.