В процессе работы с WordPress на сайте могут накапливаться большие по размеру файлы — это могут быть изображения, видео, архивы или другие медиафайлы. Они занимают много места на сервере, замедляют резервное копирование и могут привести к превышению лимитов хостинга. В этой статье разберём, как настроить автоматическое удаление таких больших файлов, чтобы поддерживать чистоту и эффективность сайта без лишних затрат времени.
Почему важно контролировать размер файлов в WordPress
Медиафайлы — существенная часть контента на любом сайте, но без контроля за их размером и количеством растут риски:
- Переполнение пространства на сервере, что приводит к дополнительным расходам.
- Долгое время выполнения резервного копирования и восстановления.
- Ухудшение скорости загрузки сайта, если большие файлы вставлены в контент.
- Сложности с миграцией сайта из-за громоздких файлов.
Автоматизация удаления больших файлов поможет регулярно чистить хранилище и избегать перечисленных проблем.
Как определить, какие файлы считать большими
Первым шагом нужно определить критерии для удаления. Обычно это файлы, размер которых превышает определённый лимит — например, 5 МБ или 10 МБ. Также можно учитывать типы файлов, например, удалять только видео или архивы.
Подобные правила зависят от специфики сайта и доступного дискового пространства. Для WordPress часто достаточно ограничиться файлами свыше 5 МБ, не трогая изображения, если они критичны для дизайна.
Автоматическое удаление больших файлов с помощью пользовательского кода
Ниже пример функции для WordPress, которая по расписанию проверяет медиафайлы и удаляет те, что превышают заданный размер. Для запуска используем WP-Cron:
function cyrtolat_delete_large_files() {
$size_limit = 5 * 1024 * 1024; // 5 МБ в байтах
$args = [
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_status' => 'inherit',
];
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$file_path = get_attached_file(get_the_ID());
if (file_exists($file_path)) {
$file_size = filesize($file_path);
if ($file_size > $size_limit) {
// Удаляем вложение и файл
wp_delete_attachment(get_the_ID(), true);
}
}
}
wp_reset_postdata();
}
}
// Регистрируем событие, если оно ещё не существует
if (!wp_next_scheduled('cyrtolat_delete_large_files_hook')) {
wp_schedule_event(time(), 'daily', 'cyrtolat_delete_large_files_hook');
}
// Хук для запуска функции
add_action('cyrtolat_delete_large_files_hook', 'cyrtolat_delete_large_files');Этот код раз в сутки проверяет все вложения и удаляет файлы больше 5 МБ. Для изменения частоты можно использовать другие интервалы WP-Cron (например, 'hourly').
Использование плагинов для управления большими файлами
Если вы предпочитаете готовые решения, есть несколько полезных плагинов, которые помогут найти и удалить большие файлы:
- Media Cleaner — анализирует медиабиблиотеку, находит неиспользуемые и большие файлы, позволяет безопасно удалять.
- WP-Optimize — комплексная оптимизация базы данных и медиа, в том числе удаление крупных и неиспользуемых файлов.
- FileBird — менеджер медиа с возможностью сортировки и управления файлами по папкам, помогает выявить тяжёлые объекты.
Эти плагины можно найти и установить с официального репозитория WordPress. Для интеграции с ними и автоматизации удаления используйте их встроенные настройки или API.
Как обезопасить процесс удаления больших файлов
Автоматическое удаление — мощный инструмент, но важно не потерять нужный контент. Рекомендации:
- Перед активацией кода или плагинов создайте резервную копию сайта и базы данных.
- Добавьте фильтры, чтобы исключить важные файлы по типу, дате загрузки или тегам.
- Тестируйте на тестовом сайте или отдельной среде перед применением на рабочем проекте.
Например, можно расширить функцию, чтобы исключать файлы по MIME-типу:
function cyrtolat_delete_large_files() {
$size_limit = 5 * 1024 * 1024; // 5 МБ
$exclude_types = ['image/jpeg', 'image/png', 'image/gif'];
$args = [
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_status' => 'inherit',
];
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$file_path = get_attached_file(get_the_ID());
$file_type = get_post_mime_type(get_the_ID());
if (file_exists($file_path) && !in_array($file_type, $exclude_types)) {
$file_size = filesize($file_path);
if ($file_size > $size_limit) {
wp_delete_attachment(get_the_ID(), true);
}
}
}
wp_reset_postdata();
}
}Заключение: регулярная уборка больших файлов для здорового сайта
Поддержание оптимального размера медиафайлов — важный аспект управления сайтом на WordPress. Автоматизация удаления больших файлов с помощью кастомных функций или плагинов позволяет экономить место, повышать производительность и упрощать администрирование. Используйте приведённые примеры кода и рекомендации, чтобы внедрить удобное и безопасное решение.
Если хотите расширить возможности сайта, посмотрите инструменты для оптимизации и управления медиа на WPShop.