Почему важно удалять старые загрузки в WordPress
Со временем медиабиблиотека WordPress может разрастаться до огромных размеров. Это влияет на скорость работы сайта, увеличивает нагрузку на хранилище и усложняет резервное копирование. Особенно часто накапливаются неиспользуемые или устаревшие изображения, аудио и видеофайлы.
Удаление старых загрузок помогает:
- Освободить место на сервере
- Ускорить резервное копирование и обслуживание сайта
- Улучшить производительность сайта и базы данных
- Поддерживать порядок в медиабиблиотеке
В этой статье мы рассмотрим, как автоматизировать процесс удаления старых загрузок с помощью кода и плагинов.
Как определить «старые» загрузки и подготовиться к удалению
В контексте автоматизации обычно под «старыми» подразумеваются файлы, которые были загружены давно и не используются в публикациях или страницах. Часто используются критерии:
- Дата загрузки (например, файлы старше 1 года)
- Использование медиафайла (непривязанные к записям)
- Размер файла (для удаления больших неиспользуемых)
Перед автоматическим удалением обязательно сделайте резервную копию сайта и базы данных, чтобы избежать потери важных данных.
Автоматическое удаление старых загрузок с помощью кода WPLab
Создадим функцию wplab_delete_old_uploads(), которая будет удалять медиафайлы старше заданного срока. Для наглядности возьмём срок в 365 дней.
function wplab_delete_old_uploads() {
$days = 365; // Количество дней
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$args = array(
'post_type' => 'attachment',
'post_status' => 'inherit',
'date_query' => array(
array(
'before' => $date_threshold,
),
),
'posts_per_page' => -1,
'fields' => 'ids',
);
$attachments = get_posts($args);
foreach ($attachments as $attachment_id) {
// Проверяем, используется ли медиафайл в записях
$is_used = wplab_is_attachment_used($attachment_id);
if (!$is_used) {
wp_delete_attachment($attachment_id, true); // Удаляем без возможности восстановления
}
}
}
function wplab_is_attachment_used($attachment_id) {
global $wpdb;
$attachment_url = wp_get_attachment_url($attachment_id);
if (!$attachment_url) return false;
// Ищем ссылки на файл в контенте записей
$query = $wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_content LIKE %s LIMIT 1",
'%' . $wpdb->esc_like(basename($attachment_url)) . '%'
);
$result = $wpdb->get_var($query);
return !empty($result);
}Эта функция получает все вложения старше 365 дней и проверяет, используются ли они в содержимом сайта. Если нет — удаляет.
Как добавить задачу в cron для регулярного запуска
Чтобы функция запускалась автоматически, добавим событие в WordPress cron:
add_action('wplab_daily_delete_old_uploads', 'wplab_delete_old_uploads');
// Регистрируем cron при инициализации
function wplab_register_cron() {
if (!wp_next_scheduled('wplab_daily_delete_old_uploads')) {
wp_schedule_event(time(), 'daily', 'wplab_daily_delete_old_uploads');
}
}
add_action('wp', 'wplab_register_cron');<Теперь функция wplab_delete_old_uploads() будет запускаться ежедневно.
Использование плагинов для автоматического удаления старых загрузок
Если вы не хотите писать код, можно использовать готовые решения. Рекомендуем обратить внимание на:
- Media Cleaner — плагин для поиска и удаления неиспользуемых медиафайлов. Он проверяет, привязаны ли файлы к записям, и предлагает удалить мусор.
- WP Optimize — плагин для оптимизации базы данных и очистки медиа. Поддерживает удаление ревизий и неиспользуемых файлов.
Важно: перед использованием плагинов делайте полную резервную копию, так как удаление медиафайлов необратимо.
Как интегрировать WPLab My Popup для уведомления об очистке
Для информирования администраторов о результатах очистки можно использовать плагин My Popup. Например, после удаления выводить сообщение с количеством удалённых файлов.
Пример кода для вызова всплывающего окна после очистки:
function wplab_notify_admin_after_cleanup() {
$deleted_count = 0;
// Ваша логика подсчёта удалённых файлов
if ($deleted_count > 0) {
echo '<script>
jQuery(document).ready(function($) {
MyPopup.open({
title: "Очистка медиафайлов",
content: "Удалено файлов: ' . $deleted_count . '"
});
});
</script>';
}
}
add_action('admin_notices', 'wplab_notify_admin_after_cleanup');Советы по безопасности и предупреждения
Автоматическое удаление файлов — операция рискованная, особенно если фильтры заданы некорректно. Несколько рекомендаций:
- Всегда делайте резервные копии перед запуском очистки.
- Проверяйте файлы на использование в записях и плагинах.
- Тестируйте код на тестовом сайте перед применением в продакшене.
- Ограничивайте права доступа к функциям удаления.
Так вы защитите себя от потери важных данных.