В WordPress часто возникает необходимость контролировать или ограничивать загрузку файлов по разным причинам: безопасность, оптимизация пространства на сервере или соответствие требованиям сайта. В этой статье подробно разберём, как удалить ненужные загрузочные файлы и заблокировать загрузку определённых типов файлов с помощью кода и плагинов.
Почему важно контролировать загрузочные файлы в WordPress
По умолчанию WordPress разрешает загрузку множества типов файлов, включая изображения, документы, архивы и др. Однако это может привести к нескольким проблемам:
- Безопасность: Загрузка потенциально опасных файлов (.exe, .php и др.) может привести к взлому сайта.
- Оптимизация: Большое количество ненужных файлов может занимать много места на сервере, замедлять бэкапы и восстановление.
- Управление: Контроль типов загружаемых файлов упрощает администрирование и предотвращает ошибки пользователей.
Поэтому важно иметь инструменты и методы для удаления нежелательных файлов и блокировки их загрузки.
Удаление загрузочных файлов из библиотеки WordPress
Чтобы удалить загрузочные файлы, можно использовать штатную медиа-библиотеку, но при большом количестве файлов это неудобно. Рассмотрим, как сделать это программно.
Функция wpmark_delete_upload_file($attachment_id) удалит вложение и связанные с ним файлы:
function wpmark_delete_upload_file($attachment_id) {
if (!current_user_can('delete_post', $attachment_id)) {
return new WP_Error('forbidden', 'Недостаточно прав для удаления файла.');
}
// Удаляем вложение и физический файл
$deleted = wp_delete_attachment($attachment_id, true);
if ($deleted) {
return true;
} else {
return new WP_Error('delete_failed', 'Не удалось удалить файл.');
}
}Пример использования:
$result = wpmark_delete_upload_file(123);
if (is_wp_error($result)) {
echo 'Ошибка: '.$result->get_error_message();
} else {
echo 'Файл успешно удалён';
}Такой подход позволяет удалять файлы из базы и сервера безопасно.
Блокировка загрузки файлов по типу через фильтр
Для запрета загрузки определённых типов файлов применим фильтр upload_mimes. Ниже пример, который запрещает загрузку файлов с расширениями .exe и .bat:
function wpmark_disable_certain_mimes($mimes) {
unset($mimes['exe']);
unset($mimes['bat']);
return $mimes;
}
add_filter('upload_mimes', 'wpmark_disable_certain_mimes');Так мы исключаем нежелательные расширения из разрешённых. Можно добавить любые расширения по потребности.
Блокировка по размеру файла
Иногда важно ограничить размер загружаемых файлов. Для этого используем фильтр wp_handle_upload_prefilter:
function wpmark_limit_upload_size($file) {
$max_size = 2 * 1024 * 1024; // 2 МБ
if ($file['size'] > $max_size) {
$file['error'] = 'Файл слишком большой. Максимальный размер 2 МБ.';
}
return $file;
}
add_filter('wp_handle_upload_prefilter', 'wpmark_limit_upload_size');Это остановит загрузку слишком больших файлов.
Использование плагинов для управления загрузками
Если хочется избежать кода, можно использовать плагины:
- WP Upload Restriction — простой плагин для ограничения типов и размеров загружаемых файлов.
- Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wpmark.ru&utm_medium=article&utm_campaign=kak-udalit-i-zablokirovat-zagruzochnye-fajly-v-wordpress) — расширенный функционал для оптимизации, в том числе управление загрузками и безопасность.
Плагины позволяют быстро настроить ограничения без программирования.
Как автоматически удалять временные и ненужные файлы
В процессе работы WordPress и плагинов на сервере могут накапливаться временные или устаревшие файлы. Их удаление важно для поддержания порядка и освобождения места.
Можно создать функцию wpmark_cleanup_temp_uploads(), которая удалит файлы из временной папки:
function wpmark_cleanup_temp_uploads() {
$upload_dir = wp_upload_dir();
$temp_dir = $upload_dir['basedir'] . '/temp';
if (!is_dir($temp_dir)) {
return;
}
$files = glob($temp_dir . '/*');
$now = time();
foreach ($files as $file) {
if (is_file($file)) {
$file_age = $now - filemtime($file);
if ($file_age > 86400) { // старше 24 часов
unlink($file);
}
}
}
}
// Можно запускать по крону или вручную
add_action('wp_footer', 'wpmark_cleanup_temp_uploads');Такой подход помогает автоматически поддерживать чистоту загрузок.
Итоговые рекомендации
Для эффективного управления загрузочными файлами в WordPress советую:
- Ограничивать типы файлов через фильтр
upload_mimes. - Ограничивать размер файлов с помощью
wp_handle_upload_prefilter. - Удалять ненужные файлы программно через
wp_delete_attachment. - Использовать проверенные плагины для удобства.
- Автоматизировать очистку временных файлов.
Так вы повысите безопасность сайта, сэкономите место на сервере и упростите администрирование.