В WordPress загрузочные файлы (например, изображения, видео, документы) часто накапливаются и могут создавать проблемы с безопасностью, производительностью и управлением хранилищем. В этой статье мы подробно разберём, как эффективно удалять ненужные загрузочные файлы и блокировать загрузку нежелательных типов файлов с помощью кода и плагинов, чтобы оптимизировать работу сайта на WordPress.
Почему важно контролировать загрузочные файлы в WordPress
Медиафайлы занимают значительную часть дискового пространства на сервере, и неконтролируемая загрузка может привести к увеличению размера резервных копий и замедлению работы сайта. Кроме того, загрузка вредоносных файлов или неподдерживаемых форматов может создать угрозы безопасности. Поэтому важно не только уметь удалять ненужные файлы, но и блокировать загрузку нежелательных типов файлов.
На практике часто возникает ситуация, когда пользователи загружают файлы, которые не используются, или пытаются загрузить потенциально опасные файлы. В этой статье рассмотрим как решить обе задачи.
Удаляем неиспользуемые загрузочные файлы
Определение неиспользуемых файлов
Первым шагом является выявление файлов, которые загружены в медиатеку, но не используются ни в каких постах, страницах или на сайте. Это можно сделать вручную или с помощью плагинов, например, Media Cleaner или плагина WPRemark для аудита медиа.
Однако для автоматизации и интеграции в собственные решения можно написать функцию, которая проверяет связи между медиафайлами и записами.
Пример функции для поиска неиспользуемых медиафайлов
Ниже пример функции с префиксом домена, которая возвращает ID медиафайлов без привязки к постам:
function wpmark_get_unused_media_ids() {
global $wpdb;
$query = "
SELECT ID FROM {$wpdb->posts} p
WHERE post_type = 'attachment'
AND NOT EXISTS (
SELECT 1 FROM {$wpdb->postmeta} pm WHERE pm.meta_value = p.ID
)
AND post_parent = 0
";
return $wpdb->get_col($query);
}Эта функция ищет вложения, которые не связаны с другими постами через post_parent и метаданные. После получения ID таких файлов можно вызвать удаление через wp_delete_attachment.
Удаление неиспользуемых файлов
Для удаления используем код:
$unused_ids = wpmark_get_unused_media_ids();
foreach ($unused_ids as $id) {
wp_delete_attachment($id, true); // true — чтобы удалить физический файл
}Этот код безопасно удалит все неиспользуемые медиафайлы, освободив место на сервере.
Блокируем загрузку нежелательных типов файлов
Почему блокировать загрузку файлов
По умолчанию WordPress разрешает загрузку множества типов файлов, включая потенциально опасные, например, PHP, exe, и др. Чтобы обезопасить сайт, нужно ограничить эти типы или разрешить только нужные.
Ограничение по MIME-типам через фильтр upload_mimes
Самый простой способ — использовать фильтр upload_mimes, который позволяет задать список допустимых типов.
Пример кода с префиксом:
function wpmark_restrict_upload_mimes($mimes) {
// Оставляем только изображения и PDF
return array(
'jpg|jpeg|jpe' => 'image/jpeg',
'png' => 'image/png',
'gif' => 'image/gif',
'pdf' => 'application/pdf',
);
}
add_filter('upload_mimes', 'wpmark_restrict_upload_mimes');Этот код блокирует загрузку всех типов, кроме указанных. Можно добавить или убрать форматы по необходимости.
Блокировка загрузки по расширению и имени файла на уровне JavaScript и PHP
Дополнительно можно добавить проверку имени файла при загрузке, чтобы предотвратить загрузку файлов с опасными именами или расширениями.
function wpmark_validate_upload_file($file) {
$forbidden_extensions = array('exe', 'php', 'js', 'sh');
$ext = pathinfo($file['name'], PATHINFO_EXTENSION);
if (in_array(strtolower($ext), $forbidden_extensions)) {
$file['error'] = 'Загрузка файлов с расширением .' . $ext . ' запрещена.';
}
return $file;
}
add_filter('wp_handle_upload_prefilter', 'wpmark_validate_upload_file');Этот код проверяет расширение до загрузки и блокирует нежелательные файлы с сообщением об ошибке.
Используем плагины для удобства и расширенных функций
Если вы не хотите писать код или хотите расширенные возможности, рассмотрите следующие плагины:
- Clearfy Pro — позволяет ограничивать загрузку файлов, оптимизировать медиа и очищать неиспользуемые вложения, в том числе интегрируется с WPRemark для отзывов и аудита.
- Media Cleaner — автоматически находит неиспользуемые файлы и предлагает их удалить.
- WPRemark — в рамках автоматизации отзывов и аудита медиафайлов помогает контролировать загрузки.
Все эти плагины можно скачать на wpshop.ru.
Резервное копирование перед удалением файлов
Важно помнить, что перед массовым удалением файлов нужно сделать резервную копию сайта, чтобы избежать потери важных данных. Для этого можно использовать штатные решения WordPress или плагины для резервного копирования.
Автоматизация резервного копирования с WPRemark
Плагин WPRemark поддерживает создание автоматических снимков и резервных копий, что позволит вам безопасно управлять медиафайлами.
Выводы и рекомендации
Контроль загрузочных файлов в WordPress — это залог стабильной и безопасной работы сайта. Используйте сочетание кода и плагинов для удаления неиспользуемых файлов и блокировки нежелательных типов. Всегда делайте резервные копии перед важными операциями и тестируйте изменения на тестовом стенде.
Таким образом, вы сможете оптимизировать место на сервере, улучшить безопасность и производительность вашего WordPress-сайта без лишних усилий.